ディレクトリ内のさまざまなパッケージからコンパイルされた複数の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」をロードしようとするまで、このコードは正常に実行されます。プログラムが永続的にハングします。
クラスがロードされる順序を変更しても効果はありませんでしたが、多くの実験の結果、ネイティブ クラスを拡張するクラスはすべて、ランタイム内に既に存在するすべてのクラスを参照する「ネイティブ」というハングを引き起こすことがわかりました。
だからここに私の質問があります:
これは実行時にクラスをロードする正しい方法ですか?
問題の修正はありますか?
お時間をいただきありがとうございます。