IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

[Introspection] accès aux classes encapsulées dans un JAR


Sujet :

API standards et tierces Java

  1. #1
    Membre régulier
    Avatar de couetbis
    Inscrit en
    Juillet 2005
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2005
    Messages : 137
    Points : 106
    Points
    106
    Par défaut [Introspection] accès aux classes encapsulées dans un JAR
    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 :
    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;
    	}
    J'ai l'erreur
    fr.nompackage n'apparait pas comme un package valide.

  2. #2
    Rédacteur
    Avatar de bulbo
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2004
    Messages
    1 259
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Février 2004
    Messages : 1 259
    Points : 1 937
    Points
    1 937
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    directory = new File(resource.getFile());
    suivi de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (directory.exists())
    Ne peut pas fonctionner si tes classes sont dans un jar. Si tu veux explorer ton jar pour decouvrir si le package existe et trouver toutes les classes du package tu vas devoir le faire toi meme (java.util.jar).

    Bulbo
    [Java] [NetBeans] [CVS]
    La FAQ Java
    Merci de ne pas me poser de questions techniques par MP.

  3. #3
    Membre régulier
    Avatar de couetbis
    Inscrit en
    Juillet 2005
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Juillet 2005
    Messages : 137
    Points : 106
    Points
    106
    Par défaut
    Merci, c'est quand même dommage de devoir prévoir les deux cas ...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [V6] Paramétrer l'accès aux classes/objets dans l'univers
    Par kiralina dans le forum Designer
    Réponses: 4
    Dernier message: 11/12/2012, 17h24
  2. Réponses: 4
    Dernier message: 16/04/2009, 01h43
  3. Réponses: 17
    Dernier message: 19/07/2006, 14h24
  4. Accès aux valeurs contenues dans un objet
    Par WalidNat dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/05/2006, 17h26
  5. [TOMCAT] acces aux page jsp dans un autre repertoire
    Par yanagiba dans le forum Tomcat et TomEE
    Réponses: 8
    Dernier message: 16/08/2005, 06h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo