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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.

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