gpt4 book ai didi

java - 尽管我的类(class)已加载,但 Class.forName 会抛出 ClassNotFoundException

转载 作者:行者123 更新时间:2023-11-30 08:26:10 25 4
gpt4 key购买 nike

代码如下

它的作用是将所有类加载到我放在主目录中的 jar 文件中。

import java.io.File;
import java.util.jar.JarFile;
import java.util.jar.JarEntry;
import java.net.URLClassLoader;
import java.net.URL;
import java.util.Enumeration;
import java.lang.ClassLoader;
public class Plugin extends ClassLoader {
public static void main(String[] args) throws Exception {

File file = new File(System.getProperty("user.home") + "/HelloWorld.jar");

URLClassLoader clazzLoader = URLClassLoader.newInstance(new URL[]{file.toURI().toURL()});

JarFile jarFile = new JarFile(file);
Enumeration<JarEntry> entries = jarFile.entries();

while (entries.hasMoreElements()) {
JarEntry element = entries.nextElement();
if (element.getName().endsWith(".class")) {
try {
Class c = clazzLoader.loadClass(element.getName().replaceAll(".class", "").replaceAll("/", "."));
c.newInstance(); // this proves that class is loaded
} catch (Exception e) {
e.printStackTrace();
}
}
}
Class cls = Class.forName("HelloWorld");
cls.newInstance();
Plugin p = new Plugin();
p.checkIfLoaded();

}

public void checkIfLoaded() {
System.out.println("coming in");
if (findLoadedClass("HelloWorld") != null){
System.out.println("Yepee, HelloWorld class is loaded !");
}
}

}

我的 HelloWorld 是 https://github.com/HarishAtGitHub/doc/blob/master/makeExecutableJar/HelloWorld.java

jar 是使用上面提到的我的 github 帐户中的说明获取的。

c.newInstance() 有效。

我是如何确认的?

静态 block 被执行了...

但是 Class.forName("HelloWorld") 抛出 ClassNotFoundException

findLoadedClass("HelloWorld") 也为 null ..

我不明白为什么会出现这种奇怪的行为?

请指导...

最佳答案

这是一个类加载器问题。

根据 Javadocs to Class.forName ,您正在使用当前类的类加载器查找类。作为您的主类,这将是 JVM 的 Bootstrap 类加载器(并且或多或少只包括标准库以及您作为 -cp 命令行参数提供的任何内容)。它不会委托(delegate)给您作为局部变量实例化的类加载器,因此不会返回类加载器可以找到的类。

如果您明确指定类加载器,并调用

Class.forName("HelloWorld", true, clazzloader)

然后将搜索您刚刚创建的类加载器,并且应该找到您的类。

关于java - 尽管我的类(class)已加载,但 Class.forName 会抛出 ClassNotFoundException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21749741/

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