J'essaie d'utiliser Class.forName pour charger dynamiquement une classe à partir d'un fichier .jar sur le système de fichiers lors de l'exécution. La classe que j'essaie de charger implémente une interface dans un autre fichier .jar, donc j'utilise mon propre URLClassLoader pour référencer les deux .jars.Problème avec Java Class.forName
Le code fonctionne lorsqu'il n'est pas appelé dans le contexte de l'application web (j'ai testé cela en copiant et collant la méthode dans un programme séparé et en l'appelant depuis le principal). Cependant, lorsque j'exécute/débogue l'application web (j'utilise NetBeans) le code échoue. La méthode newInstance déclenche une exception ClassCastException lorsque j'essaie de convertir l'instance vers l'interface spécifiée dans jar_file_dependencies.jar.
Voici le code correspondant si cela aide:
File gameJar = new File("C:\\file_path\\jar_file.jar");
File gameDependenciesJar = new File("C:\\file_path\\jar_file_dependencies.jar");
URLClassLoader cl = new URLClassLoader(new URL[]
{
gameJar.toURI().toURL(),
gameDependenciesJar.toURI().toURL()
});
Class clazz = Class.forName("MyClass", true, cl);
IMyClass myClass = (IMyClass)clazz.newInstance();
System.out.println(game);
} catch (Exception e)
{
System.out.println(e.getMessage());
}
Toutes les suggestions pour expliquer pourquoi ce code fonctionne dans un programme et non une autre serait grandement apprécié.
Un grand merci, Dan
Se pourrait-il cette question: http://stackoverflow.com/questions/2081000/java-lang-classcastexception-when-casting-object-result-of-java-lang-reflect-met? – Lars
@Lars, je pense que c'est effectivement le problème. Allait suggérer la même chose - donner le URLClassLoader un parent. –