我有一個程序,我在其中編譯有人在文本框中寫入的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