【发布时间】:2013-06-21 15:50:30
【问题描述】:
我在一个目录中有多个从各种包中编译的 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”。程序永久挂起。
更改加载类的顺序没有任何效果,但经过大量实验后,我发现任何扩展本机类的类都会导致这种挂起,“本机”指的是运行时中已经存在的所有类。
所以这是我的问题:
这是在运行时加载类的正确方法吗?
问题有解决办法吗?
感谢您的宝贵时间。
【问题讨论】:
-
快速
jstack或 ^Z/^break 应该会显示挂起的位置。 -
我已经知道挂起发生在哪里,并且发现了扩展原生类和挂起之间的关联;有这方面的文件吗?
-
我的意思是在哪里实现。
标签: java dynamic runtime urlclassloader