我正在尝试使用 Class.forName 在运行时从文件系统上的 .jar 文件动态加载类。我尝试加载的类在另一个 .jar 文件中实现了一个接口,因此我使用自己的 URLClassLoader 来引用这两个 .jar。
该代码在不在 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());
}
关于为什么此代码在一个程序中而不是另一个程序中工作的任何建议将不胜感激。
非常感谢,丹