我想在運行時使用Class.forName從文件系統上的.jar文件動態加載類。我試圖加載的類在另一個.jar文件中實現了一個接口,因此我使用自己的URLClassLoader來引用這兩個.jar。Java Class.forName問題
當代碼不在Web應用程序的上下文中調用時(我已通過將該方法複製並粘貼到獨立程序並從main調用它來測試此代碼)時,該代碼有效。但是,當我運行/調試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());
}
任何建議,爲什麼這個代碼在一個程序中工作而不是另一個將不勝感激。
非常感謝, 丹
難道是這個問題:http://stackoverflow.com/questions/2081000/java-lang-classcastexception-when-casting-object-result-of-java-lang-reflect-met? – Lars 2010-12-09 20:27:08
@Lars,我認爲確實是這個問題。會建議同樣的事情 - 給URLClassLoader一個父母。 – 2010-12-09 20:31:36