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

の 2 つの引数形式を使用してURLClassLoader.newInstance、親クラス ローダーを呼び出し元のコードのクラス ローダーに設定します。

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