gpt4 book ai didi

Java URLClassloader 挂起

转载 作者:行者123 更新时间:2023-12-01 04:36:42 36 4
gpt4 key购买 nike

我在一个目录中有多个来自不同包的已编译 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”。程序永久挂起。

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

这是我的问题:

Is this the right way to load classes during runtime?

Is there a fix to the problem?

感谢您的宝贵时间。

最佳答案

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

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

参见URLClassLoader(URL[], ClassLoader) .

关于Java URLClassloader 挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17239398/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com