Class.forName を使用して、実行時にファイルシステム上の .jar ファイルからクラスを動的にロードしようとしています。ロードしようとしているクラスは、別の .jar ファイルにインターフェイスを実装しているため、独自の URLClassLoader を使用して 2 つの .jar ファイルを参照しています。
このコードは、Web アプリのコンテキスト以外で呼び出された場合に機能します (メソッドをコピーして別のプログラムに貼り付け、メインから呼び出すことでこれをテストしました)。ただし、Web アプリケーションを実行/デバッグすると (NetBeans を使用しています)、コードが失敗します。jar_file_dependencies.jar で指定されたインターフェースにインスタンスをキャストしようとすると、newInstance メソッドが ClassCastException をスローします。
これが役立つ場合の関連コードは次のとおりです。
File gameJar = new File("C:\\file_path\\jar_file.jar");
File gameDependenciesJar = new File("C:\\file_path\\jar_file_dependencies.jar");
URLClassLoader cl = new URLClassLoader(new URL[]
{
gameJar.toURI().toURL(),
gameDependenciesJar.toURI().toURL()
});
Class clazz = Class.forName("MyClass", true, cl);
IMyClass myClass = (IMyClass)clazz.newInstance();
System.out.println(game);
} catch (Exception e)
{
System.out.println(e.getMessage());
}
このコードがあるプログラムで機能し、別のプログラムでは機能しない理由についての提案は大歓迎です。
どうもありがとう、ダン