Java 爪哇岛

Java 爪哇岛,java,dynamic,runtime,urlclassloader,Java,Dynamic,Runtime,Urlclassloader,我在一个目录中有来自不同包的多个编译过的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[]{ne

我在一个目录中有来自不同包的多个编译过的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之前,此代码运行良好。程序永久挂起

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

下面是我的问题:

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

这个问题有解决办法吗

感谢您的时间。

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

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

请参阅。

快速jstack或^Z/^break应该会显示挂起的位置。我已经知道挂起的位置,并且已经找到了扩展本机类和挂起之间的关联;有没有关于这方面的文件?我的意思是在哪里实施。