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 :

[jar]chargement dynamique. [FAQ]


Sujet :

API standards et tierces Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 5
    Points : 4
    Points
    4
    Par défaut [jar]chargement dynamique.
    bon j'explique mon probleme :

    j'ai un programme qui recupere le nom d'un fichier .jar ainsi que le nom de la classe principal qu'il contient.

    je recupere ce nom seulement au milieu de mon programme.

    je souhaite pouvoir lancer ce .jar en cliquant sur un des boutons de mon programme.

    Seulement il va me faire Classedefnotfound, normal ce fichier jar n'est pas specifié dans le classpath.

    je souhaiterais donc savoir s'il est possible de pouvoir loader ce jar en specifiant son emplacement.

    j'ai essayer pas mal de truc avec classloader, class.forname, et avec la lib ant.....

    mais je ne trouve pas.

    merci de votre aide a tous !!!

  2. #2
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 407
    Points
    1 407
    Par défaut
    avec le runtime c possible, si jar est dans ton path ( pas ton classpath )

    En gros il faut que tu rendes possible l'execution de tes jar.

    Ensuite tu invoques le Runtime et tu execute par une commande externe 'cmd' comme tu le ferai pour n'importe qu'elle programme, sauf que là tout est fait dans ton prog java.

    @+

  3. #3
    Membre expérimenté
    Avatar de RanDomX
    Profil pro
    sans
    Inscrit en
    Mars 2003
    Messages
    579
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Mars 2003
    Messages : 579
    Points : 1 407
    Points
    1 407
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    Runtime.getRuntime ().exec ("jar <option> monjar.jar");

  4. #4
    Membre confirmé

    Inscrit en
    Juillet 2002
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 116
    Points : 514
    Points
    514
    Par défaut
    En général, on utilise la classe java.net.URLClassLoader pour charger un jar ...

    Voici un example de la creation d'un URLClassLoader et le chargement d'un JAR donné en paramétre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class Test {
    public static void main (String args[]) throws Exception 
    {
       URL urlList[] = {new File(args[0]).toURL()};
     
       ClassLoader loader = new URLClassLoader(urlList);
     }
    }
    Puis ensuite tu utilise ce ClassLoader pour créer une nouvelle instance de ta classe choisi ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ClassLoader = ... ;
    String className = ... ;
    Object o = Class.forName(className,true,loader).newInstance();

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    pkoi doit je redefiier un ClassLoader ?

    dans la deuxieme partie de ton code tu met :

    je necomprend pas ?

  6. #6
    Membre confirmé

    Inscrit en
    Juillet 2002
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 116
    Points : 514
    Points
    514
    Par défaut
    cette ligne indique juste que tu utilise le ClassLoader prédéfini par le code d'au dessus ... c'est à dire l'URLClassLoader ...

    je refait pour que ce soit plus clair :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class Test { 
    public static void main (String args[]) throws Exception 
    { 
       URL urlList[] = {new File(args[0]).toURL()}; 
     
       ClassLoader loader = new URLClassLoader(urlList); 
     
       String className = ... ; 
     
       Object o = Class.forName(className,true,loader).newInstance(); 
     } 
    }

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    URL urlList[] = {new File("c:/work/StatApi.jar").toURL()};
    ClassLoader loader = new URLClassLoader(urlList); 
     
    String className = "StatApi"; 
     
    Object o = Class.forName(className,true,loader).newInstance(); 
     
    javax.swing.JPanel Panel = (javax.swing.JPanel)  o;
    voila ce que je fais, mais voici mon erreur :

    java.lang.ClassNotFoundException: StatApi
    [/code]

  8. #8
    Membre confirmé

    Inscrit en
    Juillet 2002
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 116
    Points : 514
    Points
    514
    Par défaut
    StatApi fait parti d'un package ? comme par example :
    si c'est le cas, alors il faut que ton String className soit egal à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String className = "org.test.StatApi";

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    C bon ca marche j'avais tapé StatApi au lieu de StatAPI !


    Merci beaucoup ca marche super bien
    !!

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 22
    Points : 8
    Points
    8
    Par défaut

    J'ai utiliser la méthode de l'URLClassLoader....
    Et l'import marche une fois sur deux... il marche avec un ancien jar mais pas un récent.... y'a aucune différence entre les deux a priori... même classe, même manifest...

    J'ai juste changer quelques lignes d'affichages dans la classe... et j'ai comme erreur un beau ClassNotFoundException...

    je comprends pas d'où vient la différence...

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2006
    Messages : 22
    Points : 8
    Points
    8
    Par défaut
    J'ai ma réponse...La différence entre les deux était le package dans lequel la même classe se trouvait... une fois dans le (default package) et une autre dans la package plugins...
    C'est uniquement dans le premier que l'import fonctionne...


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

Discussions similaires

  1. Chargement dynamique d'une bibliothèque (.jar)
    Par Franquie dans le forum Android
    Réponses: 0
    Dernier message: 06/08/2014, 19h11
  2. Chargement dynamiquement Jar JDBC
    Par matla dans le forum JDBC
    Réponses: 6
    Dernier message: 14/11/2008, 14h55
  3. Chargement dynamique de Jar
    Par elskwi dans le forum Langage
    Réponses: 1
    Dernier message: 17/04/2008, 15h20
  4. chargement dynamique d'un autre jar
    Par Serik dans le forum Applets
    Réponses: 2
    Dernier message: 19/07/2007, 22h10
  5. Chargement dynamique d'une archive.jar
    Par cfrayer dans le forum Langage
    Réponses: 5
    Dernier message: 29/08/2006, 16h00

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