1

ディレクトリ内のさまざまなパッケージからコンパイルされた複数のJavaクラスファイルがあります。

C:/classes/package/A.class

C:/classes/package/B.class

C:/クラス/パッケージ/サブパッケージ/C.class

C:/クラス/パッケージ/サブパッケージ/D.class

そのように URLClassloader を使用してそれらをロードしようとしています。

URLClassloder classloader = new URLClassLoader(new URL[]{new File("C:/classes/").toURI().toURL()});
System.out.println("Loading classes...");
classloader.loadClass("package.A");
classloader.loadClass("package.B");
classloader.loadClass("package.subpackage.C");
classloader.loadClass("package.subpackage.D");
System.out.println("Loaded classes.");

「package.subpackage.D」をロードしようとするまで、このコードは正常に実行されます。プログラムが永続的にハングします。

クラスがロードされる順序を変更しても効果はありませんでしたが、多くの実験の結果、ネイティブ クラスを拡張するクラスはすべて、ランタイム内に既に存在するすべてのクラスを参照する「ネイティブ」というハングを引き起こすことがわかりました。

だからここに私の質問があります:

これは実行時にクラスをロードする正しい方法ですか?

問題の修正はありますか?

お時間をいただきありがとうございます。

4

1 に答える 1

0

JDK クラスをロードする方法URLClassLoaderを知っている親が必要です。親ローダーは、おそらくコンテキストから借用する必要があります。つまり、次のようになります。

new URLClassLoader(urls, this.getClass().getClassLoader()) 

を参照してくださいURLClassLoader(URL[], ClassLoader)

于 2013-06-23T05:03:58.277 に答える