Bonjour,
J'utilise l'introspection pour instancier des objets dont je connais le nom qu'au runtime.
Lorsque j'exécute mon programme normalement cela fonctionne correctement. J'ai créé un Jar de mon appli, et à l'exécution je n'arrive pas retrouver mes classes.
Voilà le bout de code qui plante, méthode qui liste toutes les classes du package passé en paramètre :
J'ai l'erreur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 public static Class[] getClasses(String pckgname) throws ClassNotFoundException { ArrayList<Class> classes = new ArrayList<Class>(); // Get a File object for the package File directory = null; try { ClassLoader cld = Thread.currentThread().getContextClassLoader(); if (cld == null) { throw new ClassNotFoundException("Impossible de récupérer le class loader."); } String path = '/' + pckgname.replace('.', '/');// '/' + racine + URL resource = cld.getResource(path); if (resource == null) { throw new ClassNotFoundException("Aucune ressource pour " + path); } directory = new File(resource.getFile()); } catch (NullPointerException x) { throw new ClassNotFoundException(pckgname + " (" + directory + ") n'est pas un package valide"); } System.err.println("Introspection.getClasses nom rep " + directory.getAbsolutePath()); if (directory.exists()) { // Get the list of the files contained in the package String[] files = directory.list(); for (int i = 0; i < files.length; i++) { // we are only interested in .class files if (files[i].endsWith(".class")) { // removes the .class extension classes.add(Class.forName(pckgname + '.' + files[i].substring(0, files[i].length() - 6))); } } } else { throw new ClassNotFoundException(pckgname + " n'apparait pas comme un package valide."); } Class[] classesA = new Class[classes.size()]; classes.toArray(classesA); return classesA; }fr.nompackage n'apparait pas comme un package valide.
Partager