1

我有多个从目录中的各种包中编译的 Java 类文件,就像这样。

C:/classes/package/A.class

C:/classes/package/B.class

C:/classes/package/subpackage/C.class

C:/classes/package/subpackage/D.class

我正在尝试使用这样的 URLClassloader 加载它们。

URLClassloder classloader = new URLClassLoader(new URL[]{new File("C:/classes/").toURI().toURL()});
System.out.println("Loading classes...");
classloader.loadClass("package.A");
classloader.loadClass("package.B");
classloader.loadClass("package.subpackage.C");
classloader.loadClass("package.subpackage.D");
System.out.println("Loaded classes.");

这段代码运行良好,直到我尝试加载“package.subpackage.D”。该程序永久挂起。

更改加载类的顺序没有任何效果,但经过大量实验,我发现任何扩展本机类的类都会导致这种挂起,“本机”指的是运行时中已经存在的所有类。

所以这是我的问题:

这是在运行时加载类的正确方法吗?

有解决问题的方法吗?

感谢您的时间。

4

1 回答 1

0

URLClassLoader需要一个知道如何加载 JDK 类的父级。父加载器可能应该从上下文中借用,即:

new URLClassLoader(urls, this.getClass().getClassLoader()) 

URLClassLoader(URL[], ClassLoader)

于 2013-06-23T05:03:58.277 回答