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

avec Java Discussion :

Charger une classe avec forName


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2012
    Messages : 37
    Points : 24
    Points
    24
    Par défaut Charger une classe avec forName
    Bonjour,

    Mon prof de licence nous à montrer et donner un code pour nous donner un exemple de la réflexion que je n'arrive pas à refaire fonctionner (malgré ma réflexion, haha )

    Dans un même dossier j'ai :
    Test.class
    Test.java
    TestReflexion.java

    Voici le contenu de mon fichier TestReflexion.java :

    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
    package testreflexion;
     
    import java.lang.reflect.*;
    import java.util.logging.Level;
    import java.util.logging.Logger;
     
    /**
     *
     * @author Leinox
     */
    public class TestReflexion {
     
        private Class<?> cl;
        private Method[] lesM;
     
        public TestReflexion(String className) {
            try {
                cl = Class.forName(className);
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(TestReflexion.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
     
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            System.out.println(args[0]);
    //        TestReflexion testReflexion = new TestReflexion(args[0]);
            TestReflexion testReflexion = new TestReflexion("Test");
        }
     
    }
    Et voici ce qu'on me retourne :

    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
    run:
    Test
    mars 08, 2015 9:57:01 PM testreflexion.TestReflexion <init>
    GRAVE: null
    java.lang.ClassNotFoundException: Test
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
    	at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
    	at java.security.AccessController.doPrivileged(Native Method)
    	at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    	at java.lang.Class.forName0(Native Method)
    	at java.lang.Class.forName(Class.java:259)
    	at testreflexion.TestReflexion.<init>(TestReflexion.java:18)
    	at testreflexion.TestReflexion.main(TestReflexion.java:30)
    Je ne comprend pas. Comment indiquer à Class.forName l'endroit où chercher ma classe Test ? Pouvez vous m'aider svp ?

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    974
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 974
    Points : 1 825
    Points
    1 825
    Par défaut
    Citation Envoyé par Leinox Voir le message

    java.lang.ClassNotFoundException: Test
    le message d'erreur est pourtant clair: il manque la classe Test

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il faut passer à Class.forName() le nom complet de la classe, donc y compris son package.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2012
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Salut,

    Il faut passer à Class.forName() le nom complet de la classe, donc y compris son package.
    Parfait ! Merci !

    En effet avec la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TestReflexion testReflexion = new TestReflexion("testreflexion.Test");
    c'est beaucoup mieux

    Reste à trouver un moyen pour arriver à les charger à partir d'un chemin absolue, alors que ces classes ne sont pas forcément dans des package. Pour vous mettre dans le sujet de mon TP : je réalise un mini eclipse avec les fonctionnalité minimum. Par contre il est demandé un JTree contenant les méthodes de ma classe, ses attributs et leurs propriétés (le navigator d'eclipse/netbeans/etc...).

    Bref je vais cherché.

    Merci encore de m'avoir débloqué

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Leinox Voir le message
    Reste à trouver un moyen pour arriver à les charger à partir d'un chemin absolue, alors que ces classes ne sont pas forcément dans des package.
    Indice :
    URLClassLoader

    Citation Envoyé par Leinox Voir le message
    Pour vous mettre dans le sujet de mon TP : je réalise un mini eclipse avec les fonctionnalité minimum. Par contre il est demandé un JTree contenant les méthodes de ma classe, ses attributs et leurs propriétés (le navigator d'eclipse/netbeans/etc...).
    Indice(s) :

    Java Reflection / Réflexivité ou introspection
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Décembre 2012
    Messages
    37
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Décembre 2012
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Citation Envoyé par joel.drigo Voir le message
    Indice :
    URLClassLoader


    Indice(s) :

    Java Reflection / Réflexivité ou introspection
    Wouhou ! Parfait !

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

Discussions similaires

  1. [windows] charger une dll (avec classe)
    Par superpok dans le forum Windows
    Réponses: 11
    Dernier message: 09/09/2007, 11h15
  2. creer une classe avec VC++
    Par Spacy_green dans le forum MFC
    Réponses: 6
    Dernier message: 08/06/2006, 17h53
  3. Charger une table avec PK, puis ajouter identity sur la PK
    Par heloise31 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 18/01/2006, 16h23
  4. charger une image avec Jframe
    Par Battosaiii dans le forum Agents de placement/Fenêtres
    Réponses: 10
    Dernier message: 15/12/2005, 15h35
  5. Réponses: 5
    Dernier message: 26/05/2005, 15h40

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