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 :

deux commandes sous windows dans runtime.exec()


Sujet :

Langage Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Points : 5
    Points
    5
    Par défaut deux commandes sous windows dans runtime.exec()
    Bonjour à tous ceci est mon premier message sur ce forum et il est presque plus windows que java car développant principalement sous mac j'avoue volontiers de nombreuses lacunes sous windows.

    Voila j'ai créé un lanceur en java pour mes programmes qui va rechercher les différents répertoires sur la machine de l'utilisateur ainsi sont définies le classpath, le repertoire de travail LD = launchDirectory) et le repertoire des librairies natives = ND

    sous mac tout se passe bien j'execute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    String scriptshell = "cd "+ LD +"; java " +classpath+ " -Djava.library.path=" + ND + " com.monserveur.Server >& file_path &";
    String[] command ={"/bin/bash","-c",scriptshell};
    Runtime runtime = Runtime.getRuntime();
    
    final Process process = runtime.exec(command);
    Evidemment les variables classpath LD et ND sont calculés différemment sous mac et windows ( les joies des \\ ).

    Sous windows si je lance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String scriptshell = "java" +classpath+" -Djava.library.path=" + ND + " com.monserveur.Server"
    String[] command ={"cmd.exe","/c",scriptshell};
    Runtime runtime = Runtime.getRuntime();
    Tout cela marche malheureusement pour des problemes de compatibilités maximales il faut que je me place dans le repertoire de travail (LD).

    Sous windows dés que je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     scriptshell = "cd " +LD+"; java" +classpath+" -Djava.library.path=" + ND + " com.monserveur.Server"
    Cela ne marche plus.

    En d'autres termes comment remplacez vous le ";" qui fait que mes deux commandes sont exécutés successivement à l'intérieur du même shell sous leopard.

    Merci de vos réponses et longue vie à ce forum

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String scriptshell = "cd "+ LD +"; java " +classpath+ " -Djava.library.path=" + ND + " com.monserveur.Server >& file_path &";
    String[] command ={"/bin/bash","-c",scriptshell};
    Runtime runtime = Runtime.getRuntime();
    Process process = runtime.exec(command);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    String[] command= new String[]{
            "java",
            "-cp",
            classpath,
            "-Djava.library.path=" + ND, 
            "com.monserveur.Server"
            };
    Runtime runtime = Runtime.getRuntime();
    Process process = runtime.exec(command,null,new File(workingDirectory));
    Et tu devrais être +- ok pour toutes les pateformes. Faudra juste traiter tois même les stream de l'application puisque tu ne passe pas par un shell.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Points : 5
    Points
    5
    Par défaut Oui mais..
    Merci pour ta réponse si rapide
    Je suis d'accord avec toi tchize que cette syntaxe est plus portable mais comme je l'ai écris plus haut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String scriptshell = "java" +classpath+" -Djava.library.path=" + ND + " com.monserveur.Server"
    String[] command ={"cmd.exe","/c",scriptshell};
    Runtime runtime = Runtime.getRuntime();
    marche très bien mon problème etait de savoir comment remplacer le ";" pou faire "cd mon repertoire; java monprogramme"mais tu sembles me dire que cmd.exe n'étant pas un shell je dois lancer les deux commandes séparement donc "cd LD" puis "java monprogramme" séparemment en gérant les flux pour rester à l'intèrieur de la meme commande. est ce bien cela ??

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 4
    Points : 5
    Points
    5
    Par défaut GLLLooooppss
    Process process = runtime.exec(command,null,new File(workingDirectory));


    Excuse moi je n'avais pas vu "new File(workingDirectory) " je teste et je vous tiens au courant, car je ne connaissais pas cette syntaxe n'en ayant jamais eu l'utilité.
    Merci encore de m'avoir orienté.

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    pour info, je ne pense pas qu'il y aie d'équivalent du ; dans cmd.exe, donc si tu veux chainer plusieurs commande il faudra créer un ficheir .bat et l'exécuter.

  6. #6
    Expert éminent sénior Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 570
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 570
    Points : 15 535
    Points
    15 535
    Par défaut
    Pour cmd.exe l'équivalent a ";" est "&"

Discussions similaires

  1. Réponses: 5
    Dernier message: 27/05/2015, 18h10
  2. Invite de commandes sous Windows 7
    Par ceugniet dans le forum Windows 7
    Réponses: 3
    Dernier message: 06/12/2009, 10h24
  3. Réponses: 2
    Dernier message: 07/04/2008, 13h35
  4. Réponses: 15
    Dernier message: 21/02/2007, 17h29
  5. Réponses: 21
    Dernier message: 07/05/2006, 17h27

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