关于自己创建的ClassLoader获取Class时报错

grl3838567 2012-09-16 12:15:40
我创建了一个ClassLoader想要加载一个类,但是从文件中读取byte[]这不也能成功,但是在defineClass(name, classBytes, 0, classBytes.length);这步时会报java.lang.ClassFormatError: Incompatible magic value 1668047219 in class file resources/ClassTest异常,我试了好几次都出现这个问题,有人能帮我解决下吗?
...全文
180 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
龙四 2012-09-16
  • 打赏
  • 举报
回复
如果是.class文件,那么该文件可能损坏了。也可能读取的时候出问题了,正常的魔数是OXCAFEBABE
grl3838567 2012-09-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

确定package名真的是以src开头的么
[/Quote]
我调试了下,获得的class里面Methods,Field属性都是null,这是什么情况。。求指点
grl3838567 2012-09-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

确定package名真的是以src开头的么
[/Quote]

我改了点,现在可以获取类了,但是拿到的类有点奇怪。。。不能调用任何东西,连newInstance()也报错。。
java.lang.IllegalAccessException: Class ClassLoader.ClassLoaderTest can not access a member of class ClassLoader.ClassTestEx with modifiers ""
龙四 2012-09-16
  • 打赏
  • 举报
回复
确定package名真的是以src开头的么
grl3838567 2012-09-16
  • 打赏
  • 举报
回复
有人能帮我解决下吗。。。
grl3838567 2012-09-16
  • 打赏
  • 举报
回复

class MyCLassLoader extends ClassLoader{
private int key;
public MyCLassLoader(int key){
this.key = key;
}

protected Class<?> findClass(String name){
byte[] classBytes = null;
try {
classBytes = loadClassBytes(name);
} catch (Exception e) {
e.printStackTrace();
}

Class<?> c = defineClass(name, classBytes, 0, classBytes.length);
if(c == null)
try {
throw new ClassNotFoundException(name);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return c;
}

private byte[] loadClassBytes(String name) throws Exception {
// TODO Auto-generated method stub
String cname = name.replace('.', '/') + ".MY";
FileInputStream in = null;
in = new FileInputStream(cname);

ByteArrayOutputStream butter = new ByteArrayOutputStream();
int ch;
while ( (ch = in.read()) != -1 ) {
ch = (byte)(ch-key);
butter.write(ch);
}
return butter.toByteArray();
}

}


public class ClassLoaderTest {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MyCLassLoader mc = new MyCLassLoader(3);
Class<?> c = mc.findClass("src.ClassLoader.ClassTestEx");
}

}


这个.MY后缀是一个.class文件通过key转换过来的,为什么还是会抛出java.lang.NoClassDefFoundError: src/ClassLoader/ClassTestEx (wrong name: ClassLoader/ClassTestEx)异常

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧