1
我在運行時成功加載了一個類,並在該類上調用了newInstance(),並從中創建了一個對象。類加載問題
但是,後來在程序中,我試圖再次按名稱找到該類。由於某種原因,該程序無法找到它。
下面的代碼:
MyClassLoader mcl = new MyClassLoader();
Class<?> c = mcl.loadClass("models." + getModelClassName(), getByteCode());
這裏是MyClassLoader loadClass方法:
public Class<?> loadClass(String className, byte[] classData){
return this.defineClass(className,classData,0,classData.length);
}
無論如何,看來我已經成功加載的類,因爲我可以調用的newInstance在新加載類「c」:
Object o = c.newInstance();
(所以,沒有問題,但)。
但是,後來在節目中,我提出以下電話:
Class<? extends DB4oModel> dbClass = null;
try{
dbClass = (Class<? extends DB4oModel>) Class.forName("models."+className);
} catch(ClassNotFoundException e1){
// this exception is thrown by my program !!
}
我只能猜測哪些問題可能是類已成功加載了一個類裝載器,但其他類加載器不知道這個班級? 我真的不知道。請幫忙,謝謝。
請您分享您正在接受的異常? – NCA
我認爲你的想法是真實的。爲什麼不使用類加載器獲取實例,而是使用class.forname – Subin
異常是:java.lang.ClassNotFoundException:java.net.URLClassLoader上的models.MyModelClass $ 1.run(Unknown Source)java.security.AccessController。在java.lang.Class的sun.misc.Launcher $ AppClassLoader.loadClass(Unknown Source)處的java.net.URLClassLoader.findClass(未知源代碼)上的java.lang.ClassLoader.loadClass(Unknown Source)處的doPrivileged(Native Method)。 forName0(本地方法)在java.lang.Class.forName(未知源)。 etc ... –