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

Java Discussion :

Chargement Dynamique de Class en Java


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 6
    Par défaut Chargement Dynamique de Class en Java
    J'aurais une question, le code suivant marche nikel et permet de charger la classeC, mais uniquement si la classe Exemple et la classeC sont dans le même dossier. Comment faire pour charger la classeC si elle se trouve ailleurs sur le disque dur ?


    Code java : 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
     
    public class Exemple {    
      public static void main(String []args) {
        Class c = null;  
     
        try {        
     
           c = Class.forName("ClasseC"); 
        } 
        catch(ClassNotFoundException e) {   
          System.err.println("Classe ClasseC non trouvee");
          e.printStackTrace();
        }  
     
        try {    
          c.newInstance();   
        } 
        catch(InstantiationException e) {  
          System.err.println("Erreur dans l'instanciation de la classe ClasseC");
          e.printStackTrace();
        }    
        catch(IllegalAccessException e) {  
          System.err.println("Erreur dans l'instanciation de la classe ClasseC");
          e.printStackTrace();
        }    
      }
    }


    (Class.forName("/C:/ClasseC/" ); ne marche pas ! )

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 28
    Par défaut
    donner le chemain de la classe selon les package
    exemple: Class.forName("net.developpez.Classe0");

  3. #3
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Il semblerait que java soit incapable de reconnaître un chemin disque. Si tel est le cas, ton code ne marchera qu'avec une classe visible depuis le CLASSPATH.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    C'est pas que java est incapable de reconnaître un chemin disque, c'est que ce n'est pas comme cela que ça marche.

    La méthode Class.forName prend l'identifiant de la classe (package + nom) et recherche dans le classpath via le ClassLoader.

    Pour récupérer dynamiquement une classe, il faut d'abord la charger dans le ClassLoader avant de pouvoir faire un appel à la méthode Class.forName.

  5. #5
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Par défaut
    Citation Envoyé par Deaf Voir le message
    C'est pas que java est incapable de reconnaître un chemin disque, c'est que ce n'est pas comme cela que ça marche.
    Je pense que c'est juste un jeu de mots.

    Peut etre que la solution est d'opter pour un systeme de plugins.
    http://vincentlaine.developpez.com/t.../java/plugins/

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Et comment obtient-on un ClassLoader pour les fichiers? La seule méthode statique de ClassLoader, c'est getSystemClassLoader(), et apparemment elle sert seulement à l'implémentation des autres ClassLoader...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  7. #7
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Médinoc Voir le message
    Et comment obtient-on un ClassLoader pour les fichiers?
    URLClassLoader


    a++

  8. #8
    Membre émérite
    Inscrit en
    Mars 2006
    Messages
    848
    Détails du profil
    Informations personnelles :
    Âge : 41

    Informations forums :
    Inscription : Mars 2006
    Messages : 848
    Par défaut
    Pour récupérer un ClassLoader, tu peux utiliser:
    - ClassLoader.getSystemClassLoader(), comme tu l'as trouvé
    mais aussi:
    - getClass().getClassLoader() depuis une instance de n'importe quel objet
    - Toto.class.getClassLoader() (alternative pour les méthode static)
    - Thread.currentThread().getContextClassLoader()

    voire même en créer un comme l'a suggéré adiguba

Discussions similaires

  1. "Chargement dynamique" de classe
    Par moutanakid dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/02/2008, 16h37
  2. Erreur chargement dynamique de class
    Par rastakouair dans le forum Langage
    Réponses: 1
    Dernier message: 16/12/2007, 16h42
  3. Chargement dynamique de classe et version de java
    Par TabrisLeFol dans le forum Général Java
    Réponses: 8
    Dernier message: 15/02/2007, 17h13
  4. [Classpath][Classloader]Chargement dynamique de classes
    Par vberetti dans le forum Général Java
    Réponses: 9
    Dernier message: 08/07/2005, 12h11
  5. [tomcat]chargement dynamique de classes depuis une webapp
    Par alphamax dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 12/03/2004, 09h59

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