2010-01-17 75 views
1

我使用urlClassLoader從我的eclipse rcp應用程序動態加載外部類。 invoke()方法返回一個自定義類型的Object。當拋出java.lang.reflect.Method.invoke的Object-result的java.lang.ClassCastException

ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader(); 
URLClassLoader cl = URLClassLoader.newInstance(url); 
Thread.currentThread().setContextClassLoader(cl); 
String className ="myClass"; 
Class<?> c = cl.loadClass(className); 
Object inst =c.newInstance(); 
Method run =c.getMethod("run", new Class[0]); 
Object rdsObject =run.invoke(inst, new Object[]{}); 
Thread.currentThread().setContextClassLoader(oldClassLoader); 
rts.data.RTSDataSet rds =(rts.data.RTSDataSet) rdsObject; 

當我試圖施放此對象,我得到的java.lang.ClassCastException:rts.data.RTSDataSet不能轉換爲rts.data.RTSDataSet。在我看來,原因是我在這裏有不同的ClassLoader。我的問題是:我應該如何正確設置ClassLoader?
感謝您的幫助!

回答

1

使用URLClassLoader.newInstance的雙參數形式將父類加載器設置爲調用代碼的父類加載器。

URLClassLoader loaders = URLClassLoader.newInstance(path, this.getClass().getClassLoader()); 
+0

非常感謝你,這工作! – kosmo 2010-01-17 13:21:53

+0

這不會有效嗎'URLClassLoader cl = URLClassLoader.newInstance(url,oldClassLoader);'? – 2010-12-09 20:39:34

+0

精英紳士取決於'oldClassLoader'是什麼......你幾乎不想依賴'Thread.getContextClassLoader'。 – 2010-12-09 23:18:24

相關問題