1
urlClassLoader를 사용하여 이클립스 rcp 애플리케이션에서 외부 클래스를 동적으로로드합니다. invoke() - 메서드는 자체 정의 Type의 Object를 반환합니다. 나는이 객체를 캐스팅하기 위해 노력하고있어 때java.lang.reflect.Method.invoke의 Object-result를 캐스팅 할 때 java.lang.ClassCastException이 발생했습니다.
ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader();
URLClassLoader cl = URLClassLoader.newInstance(url);
Thread.currentThread().setContextClassLoader(cl);
String className ="myClass";
Class<?> c = cl.loadClass(className);
Object inst =c.newInstance();
Method run =c.getMethod("run", new Class[0]);
Object rdsObject =run.invoke(inst, new Object[]{});
Thread.currentThread().setContextClassLoader(oldClassLoader);
rts.data.RTSDataSet rds =(rts.data.RTSDataSet) rdsObject;
, 나는 java.lang.ClassCastException가 얻을 : rts.data.RTSDataSet는 rts.data.RTSDataSet으로 캐스팅 할 수 없습니다. 그 이유는 여기에 다른 ClassLoader가 있다는 것입니다. 내 질문은 : 어떻게 ClassLoader 제대로 설정해야합니까?
도움 주셔서 감사합니다.
대단히 고맙습니다. – kosmo
URLClassLoader cl = URLClassLoader.newInstance (url, oldClassLoader); –
Elite Gentleman 'oldClassLoader'가 무엇인지에 달렸습니다 ... 당신은 거의'Thread.getContextClassLoader'에 의지하고 싶지 않습니다. –