Je charge dynamiquement une classe externe à partir de mon application eclipse rcp avec urlClassLoader. La méthode invoke() renvoie un objet de type auto-défini.java.lang.ClassCastException lors de la conversion Object-result de java.lang.reflect.Method.invoke
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;
Quand je suis en train de jeter cet objet, je reçois le java.lang.ClassCastException: rts.data.RTSDataSet ne peut pas être jeté à rts.data.RTSDataSet. Il me semble, que la raison en est que j'ai ici différents ClassLoader. Ma question est: comment dois-je définir le ClassLoader correctement?
Merci de votre aide!
Merci beaucoup, ça marche! – kosmo
Cela n'aurait pas fonctionné 'URLClassLoader cl = URLClassLoader.newInstance (url, oldClassLoader);'? –
Le gentleman d'élite Dépend de ce que 'oldClassLoader' était ... Vous ne voulez presque jamais compter sur' Thread.getContextClassLoader'. –