以下是代码:
它的作用是加载我放在家目录中的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中。
我使用了上述Github账户中的说明来获取jar文件。
c.newInstance()
可用。
我如何确认的呢?
静态块被执行了...
但是Class.forName("HelloWorld")
会抛出ClassNotFoundException
。
同时,findLoadedClass("HelloWorld"
)返回null...
我不明白为什么会出现这种奇怪的行为?
请指导...