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?
感謝您的幫助!
非常感謝你,這工作! – kosmo 2010-01-17 13:21:53
這不會有效嗎'URLClassLoader cl = URLClassLoader.newInstance(url,oldClassLoader);'? – 2010-12-09 20:39:34
精英紳士取決於'oldClassLoader'是什麼......你幾乎不想依賴'Thread.getContextClassLoader'。 – 2010-12-09 23:18:24