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

Langage Java Discussion :

methode pour exécuter une class dans un jar


Sujet :

Langage Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 65
    Points : 46
    Points
    46
    Par défaut methode pour exécuter une class dans un jar
    Bonjour,
    j'essai de faire une methode qui exécute une classe située dans un jar. le .class est directement dans le jar ( pas de sous dossier).
    avec le code ci dessous ai-je besoin de mofié le classpath ?

    filename : "/path/monjar.jar"
    classname : "myclass"

    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
        public static void exec(String filename,String classname) throws IOException
        {
             try
                 {
                 URL tmpURL;
                 Object[] objects = new Object[1];
                 URLClassLoader[] loaders = new URLClassLoader[1];
                 System.out.println("Loading 1 different classes "+"named: "+filename);
     
                     tmpURL = new File(filename).toURL();
                     System.out.println("\nLoading from: "+tmpURL);
                     loaders[0] = new URLClassLoader(new URL[] { tmpURL });
                     objects[0] = loaders[0].loadClass(classname).newInstance();
     
             } catch (Exception e) {
                 e.printStackTrace();
             }
     
     
        }
    le message d'erreur corespondant est:

    Loading 1 different classes named: /PATH/TEMP.jar
    Loading from: file:/PATH/TEMP.jar
    java.lang.IllegalAccessException: Class util.ClassStarter2 can not access a member of class MainJarClass with modifiers ""
    at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
    at java.lang.Class.newInstance0(Unknown Source)
    at java.lang.Class.newInstance(Unknown Source)
    at util.ClassStarter2.exec(ClassStarter2.java:41)
    at appli.station.StationServerWaitForCollect$CollectionLauncher.handleFile(StationServerWaitForCollect.java:116)
    at net.FileDownloadService.run(FileDownloadService.java:134)
    je pense que l'erreur doit etre toute bete mais je vois pas ce que c'est :/
    help me please

  2. #2
    Membre confirmé Avatar de Mobius
    Profil pro
    none
    Inscrit en
    Avril 2005
    Messages
    463
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : none

    Informations forums :
    Inscription : Avril 2005
    Messages : 463
    Points : 558
    Points
    558
    Par défaut
    J'ai eut aujourd'hui meme une erreur similaire :
    java.lang.IllegalAccessException: Class test.Test can not access a member of class test.MaClasse with modifiers "protected"
    En fait, cela veux dire que j'ai essayé d'accedé a un constructeur "prodected" (ce qu'il ne veut pas bien evidament). Dans ton cas, je pense qu'il s'agit d'un acces a un constructeur sans modifier (donc accessible uniquement d'une classe se trouvant dans le meme package)

    Si tu es sur qu'il existe un tel constructeur (sans parametre), tu peux passer outre ces interdictions en faisant quelque chose du genre :
    Class c = loader[0].loadClass(classname);
    Constructor constructor = c.getDeclaredConstructor(new Class[0]);
    constructor.setAccessible(true);
    object[0] = constructor.newInstance(new Object[0]);

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 65
    Points : 46
    Points
    46
    Par défaut
    merci , ça marche

    le code entier pour ceux qui un jour aurait le meme probleme:

    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
     
        public static void exec(String filename,String classname) throws IOException
        {
             try
                 {
                 URL tmpURL;
                 Object[] objects = new Object[1];
                 URLClassLoader[] loaders = new URLClassLoader[1];
                 System.out.println("Loading 1 different classes "+"named: "+filename);
     
                     tmpURL = new File(filename).toURL();
                     System.out.println("\nLoading from: "+tmpURL);
                     loaders[0] = new URLClassLoader(new URL[] { tmpURL });
     
                    Class c = loaders[0].loadClass(classname);
                    Constructor constructor = c.getDeclaredConstructor(new Class[0]);
                    constructor.setAccessible(true);
                    objects[0] = constructor.newInstance(new Object[0]);
     
     
             } catch (Exception e) {
                 e.printStackTrace();
             }
        }
    ps: y a plus le boutton "resolu" ?

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/01/2015, 15h56
  2. Attribut d'une classe dans un JAR
    Par Minimus dans le forum Langage
    Réponses: 7
    Dernier message: 12/10/2010, 09h46
  3. Difficulté pour exécuter une classe
    Par Ernesto_X dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 15/07/2010, 11h20
  4. exécuter une classe dans un jar a partir d'une methode java
    Par yann_p dans le forum API standards et tierces
    Réponses: 13
    Dernier message: 13/04/2006, 15h50
  5. Réponses: 3
    Dernier message: 13/08/2005, 15h18

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