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 :

Execution de commande DOS


Sujet :

Langage Java

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 24
    Par défaut Execution de commande DOS
    Voilà un petit bout de code :

    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
    25
    26
    public void actionPerformed(ActionEvent parEvent)
        {
            if (parEvent.getSource() == btNvNom)
            {
                SimpleDateFormat valDate=new SimpleDateFormat("HH'h'mm_dd-MMMMM-yy'.iso'"); // 12h01_28-mai-09.iso
                strDate = valDate.format(new Date());
                zoneCode.setText(strDate);
            }
            
            if (parEvent.getSource() == btLancerCrea)
            {
                String chCmd = "c:\\WINDOWS\\system32\\cmd.exe /K C:\\\"Documents and Settings\"\\util\\Bureau\\Current\\Local\\mkisofs.exe  -r -J -l -L -b \"isolinux/isolinux.bin\" -c \"isolinux/isolinux.cat\" -no-emul-boot -boot-load-size 4 -boot-info-table -graft-points -o D:\\ISO\\"+strDate+" C:\\\"Documents and Settings\"\\util\\Bureau\\Current\\Local\\Clonezilla";
    
                //String chCmdTest = "c:\\WINDOWS\\system32\\cmd.exe /K ping localhost > D:\\toto.txt";
                try
                {            
                    Runtime.getRuntime().exec(chCmd);
                    System.out.println("Lancement de la commande suivante : "+chCmd);
                }
                catch(Exception ie)
                {
                    System.out.println("erreur d'execution " + /*chCmd + */parEvent.toString());
                }        
            }
        }
    Mon problème est le suivant :

    La commande stockée dans chCmd ne s'exécute pas, alors que celle, plus simple, placée dans la variable commentée chCmdTest passe sans problème.

    Le system.out.println me retourne le code de la commande qui devrait être exécuté, et lorsque je copie/colle ce code dans une invite DOS, ça se lance...

    J'ai essayé en remplaçant "Documents and Settings" par "docume~1", ça n'a rien changé.

    J'ai essayé avec un tableau de string, je suis parvenu à lancer une invite de commande, rien de plus, grâce à la commande suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Runtime runtime = Runtime.getRuntime();
                    String[] cmd={"cmd.exe","/K start cmd.exe"};
                    try {
                      runtime.exec(cmd);
                    } catch (IOException e) {
                      e.printStackTrace();
                    }
    Je n'ai pas d'erreur/warning/exception...

    Une idée ?

    Merci d'avance !

  2. #2
    Membre chevronné Avatar de djsnipe
    Inscrit en
    Mai 2008
    Messages
    440
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 440
    Par défaut
    Une idée oui, lire le flux de sortie associé au Process renvoyé par la méthode exec

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 24
    Par défaut
    Et comment je peux faire ça ?

    J'ai repéré différentes méthodes (notamment, getOutputStream), mais j'avoue que j'ai toujours eu un peu de mal avec les flux d'E/S et les buffers... Un coup de main serait le bienvenu

    Un grand merci !!

  4. #4
    Membre confirmé
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    108
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 108
    Par défaut
    le runtime.getRuntime().exec(la commande) te renvoie un process

    lorsque j'utilisai les différent appelle de commandes, certaines ne s'exécutaient pas "entièrement" et l'application continuait avant la fin de l'exécution du process

    pour corriger cela j'ai donc fait un waitfor() sur mon process, ce qui force a attendre la fin de l'exécution du process avant de continuer

    donc en gros cela donnait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Process p = Runtime.getRuntime().exec(chCmd);
    p.waitFor();
    avec cela j'ai réduit pas mal de soucis dans l'exécution des commandes.

    par contre je te recommande grandement d'utiliser un tableau de String pour les paramètre de la commande, car parfois un espace en trop et pour java la commande ne s'exécute pas mais il te répond que tout c'est bien passé quand même

    pour ce qui est du process en lui même

    tu peut récuperer la sortie gràce au méthode de la classe process

    je te laisse regarder la doc de "Process" => http://java.sun.com/javase/6/docs/api/

    tu récupère les flux dans des inputstream que tu utilise pour lire avec un InputStreamReader par exemple

Discussions similaires

  1. [PowerBuilder] Executer une commande DOS sous PB
    Par Deedoo2000 dans le forum Powerbuilder
    Réponses: 3
    Dernier message: 09/08/2006, 15h54
  2. [API][Système] Executer une commande dos avec arguments
    Par oOoOuuhmAn dans le forum Général Java
    Réponses: 4
    Dernier message: 17/03/2006, 12h37
  3. executer une commande dos a partir d'une page WEB
    Par wagga84 dans le forum Langage
    Réponses: 1
    Dernier message: 15/03/2006, 11h09
  4. Réponses: 21
    Dernier message: 08/08/2005, 11h57
  5. [Debutant(e)][Système]Executer une commande DOS
    Par iceman dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 18/05/2004, 14h30

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