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 :

Problème d'exécution de commande dos


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 29
    Points : 30
    Points
    30
    Par défaut Problème d'exécution de commande dos
    Bonjour tout le monde

    J'ai une interface graphique java avec laquelle j'appelle divers exécutables. Je travaille sous windows 2000. J'ai un souci lorsque je souhaite lancer des lignes de commandes. Voilà le code qui lance la commande.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            try
            {
                Runtime r = Runtime.getRuntime();
                Process p3 = r.exec("cmd /c ping www.google.fr"); 
                p3.waitFor();
            }
     
            catch (Exception e)
            {
                System.out.println("erreur d'execution " + e.toString());
                e.printStackTrace();
            }
    C'est juste un exemple avec ipconfig. Je souhaite attendre la fin de l'exécution d'ipconfig. Le problème c'est que le processus ne se termine pas tout seul, lorsque je regarde le gestionnaire des processus, il est toujours présent même s'il ne tourne plus.

    De plus j'ai constaté que lorsque la commande rencontre une erreur (du style ping toto) le processus se termine correctement.

    Quelqu'un pourrait-il m'aider à comprendre pourquoi les processus restent actifs et comment faire pour les faire se terminer normalement ?

    Merci d'avance

  2. #2
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par Milowen
    Quelqu'un pourrait-il m'aider à comprendre pourquoi les processus restent actifs et comment faire pour les faire se terminer normalement ?
    Tu dois lire les flux de sortie (getInputStream() et getErrorStream()) ou tout du moins les fermer...


    a++

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 29
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par adiGuba
    Salut,
    Tu dois lire les flux de sortie (getInputStream() et getErrorStream()) ou tout du moins les fermer...
    a++
    Ok, je vois. J'ai rajouté les 2 lignes après avoir lancé le processus.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
            try
            {
                Runtime r = Runtime.getRuntime();
                Process p3 = r.exec("cmd /c ping www.google.fr");
                p3.getInputStream().close();
                p3.getErrorStream().close();
                p3.waitFor();
            }
     
            catch (Exception e)
            {
                System.out.println("erreur d'execution " + e.toString());
                e.printStackTrace();
            }
    Maintenant le processus a l'air de se dérouler correctement et se faire correctement à la fin.
    Pourrais-tu juste me confirmer que c'est effectivement ce qu'il fallait faire ? (désolé, je n'ai pas un niveau super élevé en java ^^)
    En tout cas merci beaucoup.

  4. #4
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Milowen
    Pourrais-tu juste me confirmer que c'est effectivement ce qu'il fallait faire ?
    Oui... mais la tu ignores complètement ce que la commande ping affiche normalement dans la console (mais si cela correspond bien à ce que tu souhaites).

    Sinon je fermerais également le flux d'entrée (même si cela n'a aucune importance ici puisqu'il est ignoré par ping) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p3.getOutputStream().close();
    a++

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 29
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par adiGuba
    Oui... mais la tu ignores complètement ce que la commande ping affiche normalement dans la console (mais si cela correspond bien à ce que tu souhaites).
    Oui oui, c'est effectivement ce que je souhaite. J'ai pris le ping juste pour l'exemple. Ce sont d'autres programmes (que je n'ai pas développé moi même) que j'appelle normalement et les données affichées sont récupérées d'une autre façon.


    Citation Envoyé par adiGuba
    Sinon je fermerais également le flux d'entrée (même si cela n'a aucune importance ici puisqu'il est ignoré par ping) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    p3.getOutputStream().close();
    a++
    Ok, je vais tester ça pour voir si ça influe sur l'exécution de mes programmes.

    Merci beaucoup, problème résolu

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

Discussions similaires

  1. exécuter la commande dos cscript.exe via un javascript
    Par chichiboof dans le forum VBScript
    Réponses: 17
    Dernier message: 06/04/2011, 11h55
  2. Réponses: 4
    Dernier message: 16/03/2008, 14h38
  3. Problème d'excéution de commande systeme.
    Par clebig dans le forum Langage
    Réponses: 4
    Dernier message: 19/09/2007, 11h18
  4. Exécuter une commande DOS
    Par Linio dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/06/2007, 14h49
  5. [VB.NET] exécuter une command Dos à Partir de Vb.Net
    Par Khalid.bounouader dans le forum Windows Forms
    Réponses: 4
    Dernier message: 27/12/2006, 14h05

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