我有一个程序,我在其中编译有人在文本框中写入的java代码,并运行它。 他们输入完整的源代码,类和所有在运行时加载内部类
我将它们写入的类保存到一个随机java源文件中,然后通过类加载器编译并加载该类。这工作完美。
虽然我有一个新的问题,那就是子类。我给外部类一个唯一的名称,并加载该类。
Ex。
TEMP1110.java -> TEMP1110.class
等 用内部类,它编译为TEMP1110$InnerClass.class
我试图通过我的类加载器加载这个类,但外部类使得对它的调用时:new InnerClass().method();
它给了我这样的:java.lang.NoClassDefFoundError: TEMP1110$InnerClass
是否有一些怪癖或我做错了什么?
我的类装载器:
private static class JClassLoader extends ClassLoader {
public Class buildClass(final byte[] data, final String className) {
return (Class) defineClass(className, data, 0, data.length);
}
}
className
为TEMPCLASS$InnerClass
,并且数据是代表类文件的字节数。这适用于外部类。
愚蠢的一点,但你已经把它编译为TEMP1110 $ InnerClass.java。这是一个错误类型,还是它需要的问题.class,它有错误的文件名? – berry120
错误类型。接得好! – kazoo
如果内部类不是静态的,你不需要首先加载外部类吗?看到这里:http://stackoverflow.com/questions/2868337/java-how-to-load-a-class-and-its-inner-classes-that-is-already-on-the-class-pa – berry120