Код выглядит следующим образом
он загружает все классы в файл 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, упомянутых выше.
c.newInstance()
работает.
Как я подтвердил?
статический блок был выполнен ...
но Class.forName("HelloWorld")
бросает ClassNotFoundException
также findLoadedClass("HelloWorld"
) имеет значение null ..
Я не могу понять, почему это странное поведение?
Пожалуйста, направьте ...