У меня есть программа, в которой я генерирую классы во время выполнения (включает только переменные и связанные с ними методы получения и установки). Позже я хочу заполнить классы.
Чтобы получить класс - я знаю его имя, но его нет в пути к классам - я пробовал .forName(), но всегда получаю исключение ClassNotFoundException.
Вот мой пример:
Exception in thread "main" java.lang.ClassNotFoundException: com.test.wam.business.wsobjects.Testclass
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:264)
at gui.Application.main(Application.java:94)
И код:
URLClassLoader urlClassLoader = (URLClassLoader) ClassLoader.getSystemClassLoader();
DynamicURLClassLoader dynamicURLClassLoader = new DynamicURLClassLoader(urlClassLoader);
dynamicURLClassLoader.addURL(new URL("file://C:\\dev\\Eclipse_was\\guitest\\generated"));
Class c = Class.forName("com.test.wam.business.wsobjects.Testclass");
Object classInstance = c.newInstance();
Загрузчик классов:
public class DynamicURLClassLoader extends URLClassLoader {
public DynamicURLClassLoader(URLClassLoader classLoader) {
super(classLoader.getURLs());
}
@Override
public void addURL(URL url) {
super.addURL(url);
}
}
Полное имя файла (создано с помощью eclipse -> скопировать полное имя)
/guitest/generated/com/test/wam/business/wsobjects/Testclass.java
Что здесь не так?
Class.forName
нужноclass
файлов,Testclass.java
нет. - person passion   schedule 22.09.2016DynamicURLClassLoader
ничего не делает,Class.forName(...)
каким-то образом автоматически не будет использовать этот загрузчик классов. И, конечно, исходный код Java должен быть сначала скомпилирован. - person Jesper   schedule 22.09.2016