누군가가 텍스트 상자에 쓴 Java 코드를 컴파일하고 실행하는 프로그램이 있습니다. 그들은 전체 소스 코드, 클래스 및 모두를 입력합니다.런타임에 내부 클래스로드
나는 그들이 임의의 자바 소스 파일에 쓰는 클래스를 저장 한 다음 클래스 로더를 통해 클래스를 컴파일하고로드합니다. 이것은 완벽하게 작동합니다.
하위 클래스의 새로운 문제가 있습니다. 외부 클래스에 고유 한 이름을 지정하고 해당 클래스를로드합니다.
Ex. 내부 클래스와
TEMP1110.java -> TEMP1110.class
등 , 그것은 TEMP1110$InnerClass.class
내 클래스 로더를 통해이 클래스를로드하려고 로 컴파일하지만, 외부 클래스가를 호출합니다 때 : java.lang.NoClassDefFoundError: TEMP1110$InnerClass
: new InnerClass().method();
그것을 나에게이 있습니다
이상한 점이나 잘못하고있는 것이 있습니까?
내 클래스 로더는 :
private static class JClassLoader extends ClassLoader {
public Class buildClass(final byte[] data, final String className) {
return (Class) defineClass(className, data, 0, data.length);
}
}
className
는 TEMPCLASS$InnerClass
되는, 데이터는 클래스 파일을 나타내는 바이트를 제공합니다. 이것은 외부 클래스에서 작동합니다.
어리석은 점이지만 "TEMP1110 $ InnerClass.java'에 컴파일됩니다." 그 실수인가, 아니면 .class가되어야하는 문제이며 잘못된 파일 이름이 있습니까? – berry120
Mistype. 잘 잡으세요! – kazoo
내부 클래스가 정적이 아닌 경우 먼저 외부 클래스를로드 할 필요가 없습니까? 참조 : http://stackoverflow.com/questions/2868337/java-how-to-load-a-class-and-its-inner-classes-that-is-already-on-the-class-pa – berry120