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 :

Problème exécution commande DOS


Sujet :

Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut Problème exécution commande DOS
    Bonjour,

    Je rencontre un problème lorsque je veux exécuter cette commande dans mon application java
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java -Xmx512m -cp \"c:/Program Files/Application/common/lib/*\";\"c:/Program Files/Application/lib/*\";\"c:/Program Files/Application/lib/lib/*\";\"c:/Program Files/Application/lib/lib/ext/*\";\"c:/Program Files/Application/lib/res/*\"  com.jump.workbench.JUMPWorkbench
    Or, lorsque je l'exécute directement dans une console DOS (modifiée comme suit pour l'occasion)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java -Xmx512m -cp "c:/Program Files/Application/common/lib/*";"c:/Program Files/Application/lib/*";"c:/Program Files/Application/lib/lib/*";"c:/Program Files/Application/lib/lib/ext/*";"c:/Program Files/Application/lib/res/*" com.jump.workbench.JUMPWorkbench
    elle fonctionne très bien

    L'erreur retournée est: java.lang.NoClassDefFoundError: com/jump/workbench/JUMPWorkbench

    Une idée du problème?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Salut !

    Je crois que tu lances la commande java depuis ton application java avec
    la méthode exec qui ne prend qu'une chaine en paramètre .
    Dans ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Runtime runtime = Runtime.getRuntime();
    runtime.exec("java -Xmx512m -cp \"c:/Program Files/Application/common/lib/*\";\"c:/Program Files/Application/lib/*\";\"c:/Program Files/Application/lib/lib/*\";\"c:/Program Files/Application/lib/lib/ext/*\";\"c:/Program Files/Application/lib/res/*\"  com.jump.workbench.JUMPWorkbench");
    Si c'est le cas, y a des chances que la valeur du classpath ne soit pas créée correctement à cause des espaces présents dans tes paramètres de commande.
    En effet, tes arguments contiennent des espaces (ex: Program Files).
    Or la commande exec(String command) utilise les espaces pour délimiter les arguments de la commande.

    Essaye avec la commande exec(String[] cmdarray) pour voir ce que ca donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Runtime runtime = Runtime.getRuntime();
    runtime.exec(new String[] { "java", "-Xmx512m", "-cp", \"c:/Program Files/Application/common/lib/*\", " ..."} );
    Tu dois définir chaque argument dans une chaine distincte.
    Ainsi le parser sait quand commence un argument et quand il finit aussi.
    J'ai pas mis tous les arguments dans mon exemple. Je pense que t'as compris le truc

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut
    J'ai testé en passant par un tableau de String et j'ai cette erreur maintenant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.lang.NoClassDefFoundError: C:/Program Files/Application/lib/*;
    Voilà mon code au cas où:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    new String[]{
    "javaw", 
    "Xmx512m",
    "-cp",
    "C:/Program Files/Application/common/lib/*;",
    "C:/Program Files/Application/lib/*;",
    "C:/Program Files/Application/lib/lib/*;",
    "C:/Program Files/Application/lib/lib/ext/*;",
    "C:/Program Files/Application/lib/res/*",
    "com.jump.workbench.JUMPWorkbench"}
    J'ai vraiment du mal à comprendre là...

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    J'ai vraiment du mal à comprendre là...
    arf autant pour moi, j'ai pas donné une exemple assez complet de la commande
    On va y arriver

    Le classpath attend un seul argument comme valeur. Aussi tu dois mettre le classpath dans une seule String sinon le parser va considérer ton second chemin de classpath comme un autre argument.
    Dans ce contexte, le second chemin est ainsi interprété comme la classe java à lancer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Runtime runtime = Runtime.getRuntime();
    runtime.exec(new String[]{
    "javaw", 
    "-Xmx512m",
    "-cp",
    "C:/Program Files/Application/common/lib/*;
    C:/Program Files/Application/lib/*;
    C:/Program Files/Application/lib/lib/*;
    C:/Program Files/Application/lib/lib/ext/*;
    C:/Program Files/Application/lib/res/*",
    "com.jump.workbench.JUMPWorkbench"});

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut
    Effectivement j'avais testé comme cela la première fois mais l'erreur retournée étant la même que celle du départ, je me suis dit qu'il y avait erreur
    Je ne suis toujours pas avancé donc...

    C'est quand même fou que cette commande directement exécutée sous DOS fonctionne correctement.

  6. #6
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Je suis bête !!!
    Le problème c'est que le répertoire parent de com.jump.workbench.JUMPWorkbench n'est pas dans le classpath quant tu exécutes la commande javaw.
    Ton classpath ne prend que les libs du jdk
    "C:/Program Files/Application/common/lib/*;
    C:/Program Files/Application/lib/*;
    C:/Program Files/Application/lib/lib/*;
    C:/Program Files/Application/lib/lib/ext/*;
    C:/Program Files/Application/lib/res/*"

    C'est normal qu'il ne trouve pas la classe
    Et sur dos il la voit car tu lances la commande depuis le répertoire parent du répertoire com, j'imagine.
    En ajoutant à l'argument cp, le dossier de tes classes compilées, le programme java devrait voir ta classe com.jump.workbench.JUMPWorkbench.

    Par contre, j'ai fait un test chez moi et sans ajouter le classpath menant à la classe compilée à lancer, l'exécution de la commande fonctionne si je remplace javaw par java.
    J'ai l'impression que javaw et java en dehors de l'aspect graphique (fenetre ou non), ont quelques différences. A etudier un de ces 4

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut
    Non, j'y ai pensé mais ce n'est pas ça. Même en me plaçant sur d: par exemple, la commande fonctionne parfaitement.

  8. #8
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Citation Envoyé par Micke7 Voir le message
    Non, j'y est pensé mais ce n'est pas ça. Même en me plaçant sur d: par exemple, la commande fonctionne parfaitement.
    C'est pas très logique que cela fonctionne si la classe com.jump.workbench.JUMPWorkbench compilée n'est pas dans le classpath.

    Je pense qu'en ajoutant à l'argument cp, le chemin contenant les classes compilées de ton appli com.jump.workbench.JUMPWorkbench, cela devrait marcher.

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    287
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 287
    Par défaut
    C'est là le problème: la classe com.jump.workbench.JUMPWorkbench se trouve dans un des .jar situés dans l'un des dossiers déclarés dans le classpath. Lors de l'exécution via la fenêtre DOS, cette classe est bien retrouvée, par contre lors de l'exécution via l'appli java, elle ne l'est pas, comme si le classpath n'était pas pris en compte...

  10. #10
    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,


    Il faut séparer un à un chaque paramètre du programme. Or les différents éléments du classpath correspondent à un seul et unique paramètre, et non pas plusieurs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    new String[]{
    "javaw", 
    "Xmx512m",
    "-cp",
    "C:/Program Files/Application/common/lib/*;C:/Program Files/Application/lib/*;C:/Program Files/Application/lib/lib/*;C:/Program Files/Application/lib/lib/ext/*;C:/Program Files/Application/lib/res/*",
    "com.jump.workbench.JUMPWorkbench"
    }


    a++

Discussions similaires

  1. Problème Exécution commande système ds perl
    Par tintin3158 dans le forum Programmation et administration système
    Réponses: 3
    Dernier message: 06/08/2014, 16h59
  2. conversion exécution commande DOS depuis MS SQL Server vers MySQL
    Par Valarauko dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 20/05/2012, 15h06
  3. exécuter command dos via python
    Par goenitz dans le forum Général Python
    Réponses: 3
    Dernier message: 02/10/2010, 17h09
  4. [DATA] Problème exécution commande "X" paramétrée
    Par Filippo dans le forum SAS Base
    Réponses: 9
    Dernier message: 27/01/2010, 09h30
  5. Exécuter commande DOS
    Par seacat dans le forum VBA Access
    Réponses: 3
    Dernier message: 25/10/2007, 22h48

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