【发布时间】:2011-05-23 02:37:19
【问题描述】:
我正在尝试使用 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());
}
任何关于为什么此代码在一个程序而不是另一个程序中工作的建议将不胜感激。
非常感谢, 丹
【问题讨论】:
-
会不会是这个问题:stackoverflow.com/questions/2081000/…?
-
@Lars,我认为这确实是问题所在。打算提出同样的建议——给 URLClassLoader 一个父级。
标签: java reflection interface casting classcastexception