【发布时间】:2011-09-12 22:04:52
【问题描述】:
我有一个程序,我在其中编译某人在文本框中编写的 java 代码,然后运行它。 他们输入完整的源代码、类和所有内容
我将他们编写的类保存到一个随机的java源文件中,然后通过类加载器编译和加载该类。这非常有效。
不过,我有一个新问题,即子类。我给外部类一个唯一的名字,然后加载那个类。
例如
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 并且文件名错误的问题? -
如果内部类不是静态的,你不需要先加载外部类吗?见这里:stackoverflow.com/questions/2868337/…
标签: java runtime inner-classes classloader