【发布时间】:2011-03-25 18:12:06
【问题描述】:
我有这个从 zip 加载类的方法(在我自己的类加载器中):
ZipInputStream in = new ZipInputStream(new FileInputStream(zip));
ZipEntry entry;
while ((entry = in.getNextEntry()) != null) {
if (!entry.isDirectory()) {
byte[] buffer = new byte[(int) entry.getSize()];
in.read(buffer);
if (!entry.getName().endsWith(".class"))
continue;
String name = entry.getName().replace(".class", "").replace("/", ".");
Class<?> cls = this.defineClass(name, buffer, 0, buffer.length);
this.resolveClass(cls);
}
}
我尝试加载的 zip 如下所示:
TestClass.class
TestClass$SomeOtherInnerClass.class
我的问题是defineClass() 无法加载TestClass$SomeOtherInnerClass。如果这个类是在实际的 TestClass 之前加载的,我会得到这个:
java.lang.NoClassDefFoundError: TestClass
我也尝试先加载 TestClass.class,但随后我收到此错误:
java.lang.ClassFormatError: Wrong InnerClasses attribute length in class file TestClass
是不是我做错了什么?
【问题讨论】:
-
我也有同样的问题,如何加载内部类?,我的 A 类已正确加载,但我的 A$b1 类没有...没有找到加载内部类的方法。 ..你有什么进展吗?
标签: java class classloader inner-classes