1

我的问题是,我在 Java6 上工作的代码不再工作了。由于我的应用程序需要在运行时加载 jar(插件),所以我编写了一个从 URLClassLoader 派生的简单类,如下所示

public class MyClassLoader extends java.net.URLClassLoader {

/** Creates a new instance of URLClassLoader */
public MyClassLoader(java.net.URL url) 
{
    super(new java.net.URL[]{url},ClassLoader.getSystemClassLoader());
}

public void addURL(java.net.URL url)
{
    super.addURL(url);
}}

因此,如果我想加载一个 jar,我只需调用 addURL(pathToJar) 并通过加载该类

Class.forName(myClass, true, myClassLoader)

这就像在 Java6 上运行的魅力。现在我决定在 Java7 中制作一个自包含的 Java 应用程序。当我启动应用程序时,jar 也会在运行时加载,但如果里面有一个类派生自类路径内的类(不在插件 jar 中),我会得到一个 ClassCastException。

所以我猜Java7发生了一些变化。目前我在 OSX 上使用 Java7_u13。任何人都可以给我一个提示我应该做什么,以恢复旧的行为吗?搜索网络并没有给我任何帮助。

提前谢谢了。

问候,-克里斯-

4

1 回答 1

3

同时,我找到了解决问题的方法。我只是将“错误”的类加载器用作父级。如果我更换,现在一切正常

super(new java.net.URL[]{url},ClassLoader.getSystemClassLoader());

super(new java.net.URL[]{url},MyClassLoader.class.getClassLoader());

问候,-克里斯-

于 2013-02-19T14:01:28.413 回答