1

我使用 urlClassLoader 从我的 eclipse rcp 应用程序动态加载一个外部类。invoke() 方法返回一个自定义类型的对象。

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?
感谢您的帮助!

4

1 回答 1

1

使用双参数形式URLClassLoader.newInstance将父类加载器设置为调用代码的加载器。

 URLClassLoader loaders = URLClassLoader.newInstance(path, this.getClass().getClassLoader());
于 2010-01-17T13:14:32.683 回答