런타임에 클래스를 생성하는 프로그램이 있습니다 (변수 및 관련 getter 및 setters 메소드 만 포함). 나중에 나는 수업을 채우고 싶다.Class.forName()이있는 클래스를 찾을 수 없지만 존재합니다.
클래스를 얻으려면 - 이름은 알지만 클래스 패스에는 없는데 - .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);
}
}
파일의 전체 자격을 갖춘 이름 (전자로 만든 clipse -> 복사 전체 자격을 갖춘 이름)
/guitest/generated/com/test/wam/business/wsobjects/Testclass.java 여기에 어떤 문제가
?
Class c = Class.forName(
"com.test.wam.business.wsobjects.Testclass", true, dynamicURLClassLoader
);
NB :이 작동합니다 당신이 당신의 클래스를 옆으로 대신 Class.forName(String name, boolean initialize, ClassLoader loader)
을 사용할 필요가로드 특정 ClassLoader
을 사용하려는 경우
"하지만이 아닌 클래스 경로에". 그. –
'Class.forName'은'class' 파일을 필요로합니다.'Testclass.java'는 그렇지 않습니다. – passion
이 경우 어떻게해야합니까? 생성 된 Java 파일과 클래스 파일 만 있습니까? – Lasirana