我有多个编译的Java类文件,来自目录中的各种软件包,就像这样。Java URLClassloder挂起
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/^中断应显示挂起的位置。 –
我已经知道挂起发生的位置,并发现扩展本机类和挂起之间的关联;有没有关于这方面的任何文件? – Terra
我的意思是在执行的地方。 –