A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 周恺 中级黑马   /  2012-7-17 00:04  /  1512 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 周恺 于 2012-7-18 08:12 编辑

高手帮忙看看,我的类加载器写好了以后,测试时会出现错误提示:
Exception in thread "main" java.lang.NoClassDefFoundError: ClassForTest (wrong name: d15Klo/com/cn/ClassForTest)

以下是代码

类加载器定义:
class MyClassLoader extends ClassLoader
{
private String path;
public void setPath(String path)
{
  this.path = path;
}
private String loaderName;
MyClassLoader(String loaderName)
{
  super();
  this.loaderName=loaderName;
}
MyClassLoader(ClassLoader parent,String loaderName)
{
  super(parent);
  this.loaderName=loaderName;
}
public byte[] classByteArray(String name)//将class文件字节读入字节数组中.
{
  //String className=name;
  String className=name.replace('.', '\\');
  FileInputStream fis=null;
  ByteArrayOutputStream baos=null;
  try
  {
   fis=new FileInputStream(new File(path+className+".class"));
   baos=new ByteArrayOutputStream();
   int buf=-1;
   while((buf=fis.read())!=-1)
   {
     baos.write(buf);
   }
   
   
  } catch (IOException e)
  {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  byte[] classDate=baos.toByteArray();
  return classDate;
//  return null;
}
@Override
protected Class<?> findClass(String className)//重写findClass方法.
{
  byte[] classData=classByteArray(className);
  return defineClass(className,classData, 0, classData.length);//如果我这里使用张老师视频上过期的方法defineClass(classData, 0, classData.length);就会出现:
  // java.lang.IllegalAccessException: Class d15Klo.com.cn.ClassLoadTest can not access a member of class d15Klo.com.cn.ClassForTest with modifiers ""这种错误.
}
}

类加载器测试:
public class ClassLoadTest
{
public static void main(String[] args) //throws ClassNotFoundException,
//InstantiationException, IllegalAccessException
{
  MyClassLoader myClassLoader=new MyClassLoader("myClassLoader").newInstance();
  myClassLoader.setPath("F:\\");
  
  try
  {
   myClassLoader.loadClass("ClassForTest");
  } catch (ClassNotFoundException e)
  {
   // TODO Auto-generated catch block
   e.printStackTrace();
   
  }
  
}
}
想了2小时了,请各位帮帮忙.


1 个回复

倒序浏览
类加载器测试:
public class ClassLoadTest
{
public static void main(String[] args) //throws ClassNotFoundException,
//InstantiationException, IllegalAccessException
{
  MyClassLoader myClassLoader=new MyClassLoader("myClassLoader").newInstance();
  myClassLoader.setPath("F:\\");
  
  try
  {
   myClassLoader.loadClass("ClassForTest"); //你要查找的类确定存在么?换成“ClassLoadTest”或“MyClassLoader”,就OK了。
  } catch (ClassNotFoundException e)
  {
   // TODO Auto-generated catch block
   e.printStackTrace();
   
  }
  
}
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马