gpt4 book ai didi

Java 类路径和类加载

转载 作者:行者123 更新时间:2023-11-30 07:34:46 26 4
gpt4 key购买 nike

我需要在 Java 运行时加载一个 jar 文件,我有这段代码,但它没有加载任何 jar,我不知道如何,有人可以告诉我为什么吗?我有 JVM 8 和 NetBeans 8,目的是创建一个可以加载 jar 文件作为 Windows 插件的程序。

package prueba.de.classpath;
import java.io.File;
import java.lang.reflect.Method;
import java.net.URL;
import java.net.URLClassLoader;

public class PruebaDeClasspath {

public static void main(String[] args) {
try {
Class.forName("PluginNumeroUno");
} catch (ClassNotFoundException e) {
System.out.println("Not Found");
}

try {
URLClassLoader classLoader = ((URLClassLoader) ClassLoader
.getSystemClassLoader());
Method metodoAdd = URLClassLoader.class.getDeclaredMethod("addURL",
new Class[]{URL.class});
metodoAdd.setAccessible(true);


File file = new File("plugins/PrimerPlugins.jar");

URL url = file.toURI().toURL();
System.out.println(url.toURI().toURL());

metodoAdd.invoke(classLoader, new Object[]{url});
} catch (Exception e) {
e.printStackTrace();
}

try {
Class.forName("PluginNumeroUno");
System.out.println("ok");
} catch (ClassNotFoundException e) {
System.out.println("Not Found");
}

}

}

最佳答案

尝试创建新的类加载器而不是强制转换系统类加载器。

删除此行:

URLClassLoader classLoader = ((URLClassLoader) ClassLoader.getSystemClassLoader());

并创建新的加载程序并按如下方式使用它:

File file = new File("plugins/PrimerPlugins.jar");
URLClassLoader classLoader = new URLClassLoader(new URL[]{file.toURI().toURL()},
PruebaDeClasspath.class.getClassLoader());
Class.forName("prueba.de.classpath.PluginNumeroUno", true, classLoader); //fully qualified!

请注意,要加载的类名必须是完全限定的。

您也不必动态强制 addURL() 公开。

关于Java 类路径和类加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35558837/

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