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 :

exécuter une application externe à java


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Par défaut exécuter une application externe à java
    bonjour,
    Je suis entrain de faire un programme qui me permet d'exécuter une application externe à java. Or cette application par des invitations texte demande les informations. De plus, il y a plusieurs demande texte je pense qu'il faudrait que je fasse une boucle mais je ne sais pas comment faire.

    Voici mon code qui ne fait rien:

    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
    27
    28
    29
    30
    31
    32
    Runtime runtime = Runtime.getRuntime();
                final Process process = runtime.exec(cheminappli);
     
    // Consommation de la sortie standard de l'application externe dans un Thread separe
                new Thread() {
     
                    public void run() {
                        try {
                            BufferedReader brLecteur = new BufferedReader(new InputStreamReader(process.getInputStream()));
                            reader.close();
                        } catch (IOException ioe) {
                            ioe.printStackTrace();
                        }
                    }
                }.start();
     
    // Consommation de la sortie d'erreur de l'application externe dans un Thread separe
                new Thread() {
     
                    public void run() {
                        try {
                            BufferedReader brErreur= new BufferedReader(new InputStreamReader(process.getErrorStream()));
                            reader.close();
                        } catch (IOException ioe) {
                            ioe.printStackTrace();
                        }
                    }
                }.start();
     
            } catch (IOException ex) {
                System.out.println(ex);
            }
    Merci de votre aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2008
    Messages : 38
    Par défaut
    J'ai retrouvé mon code, voici comment j'ai fait ma boucle :

    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
     new Thread() {
     
                            @Override
                            public void run() {
                                try {
                                    BufferedReader reader = new BufferedReader(new InputStreamReader(processus.getInputStream()));
                                    try {
                                        while ((reader.readLine()) != null) {
                                            //Ce que tu veux faire
                                        }
                                    } finally {
                                        reader.close();
                                    }
                                } catch (IOException ioe) {
                                    ioe.printStackTrace();
                                }
                            }
                        }.start();
                    } catch (IOException ex) {
                        Logger.getLogger(Programme.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Par défaut
    merci Noizet pour ton aide je vais l'essayer de suite
    mais ca ne marche toujours pas en fait on dirait que le buffer ok mais que je n'arrive pas a l'afficher. Je sais pas si je suis bien claire. Au fait j'ai java 1.4.

    voici le 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
    27
    28
     
     final Process p = Runtime.getRuntime().exec(commande);
     
                //pour ecrire dans l'invitation texte de l'exécutable
                new Thread(){
                	public void run(){
                		String line = "";
                		 try {
                			 InputStream is = p.getInputStream();
                             InputStreamReader isr = new InputStreamReader(is);
                             BufferedReader reader = new BufferedReader(isr);
                             try {
                                 while ((line = reader.readLine()) != null) {
                                     //Ce que tu veux faire
                                	 System.out.println ("boucle while");
                                 }
                             } finally {
                            	 System.out.println ("fin");
                                 reader.close();
                             }
                         } catch (IOException ioe) {
                             ioe.printStackTrace();
                         }
                     }
                 }.start();
             } catch (IOException ex) {
                 Logger.getLogger(ExecuterModelAllom.class.getName()).log(Level.SEVERE, null, ex);
             }

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Par défaut
    bonjour,
    personne pour m'aider???!!!
    j'ai continué à avancer et à chercher mon erreur à partir de la réponse de noizet!!!
    Or quand j'essaye de lire l'inputStream avec getInputStream cela ne me renvoie rien sauf quand je ferme mon application externe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    lectureExe = p.getInputStream();
    tamponLecture = new BufferedReader (new InputStreamReader(lectureExe));
    System.out.println("lecture tampon" + tamponLecture.read());
    je fais une erreur? je suis novice en java. Aidez moi!!!

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 406
    Par défaut
    Si tu veux savoir si le processus de ton programme externe s'est bien terminé, tu dois ajouter cette ligne à la fin de ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // On récupère la réponse du programme externe
    int reponse = processus.waitFor();
    Et cette valeur "reponse" doit être égale à 0. (ça peut être utile...)

    Sinon, fais gaffe car je crois que les InputStream et OutputStream sont à l'inverse de la logique, c'est à dire que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    lectureExe = p.getInputStream();
    te permet de voir le flux de sortie de ton programme externe et non le flux d'entrée ! Essaie donc de remplacer cette instruction par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    lectureExe = p.getOutputStream();
    J'espère t'avoir un peu aidé...
    A+

  6. #6
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Par défaut
    merci pour ton aide womannosky.
    En fait ta petite astuce m'a permis de voir que mon process est terminé très rapidement et correctement. Mais mon problème c'est que je ne récupére pas le flux de sortie de mon application externe et donc le flux d'entrée de mon application java. tu as raison pour l'histoire des flux c'est inversé, d'après des tutorials que j'ai pu lire, donc comme je veux récupérer le flux de sortie de l'application externe donc le flux d'entrée de l'appli java, c'est bien process.getInputStream?
    je mets mon code de cette partie, si quelqu'un pouvez m'aider à comprendre pourquoi je n'arrive pas à lire le flux d'entrée de l'appli java.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    final Process p = Runtime.getRuntime().exec(commande);
     
    //pour lire la sortie de l'application externe
    new Thread(){
      public void run(){
            // declaration
            InputStream lectureExe = null;
            BufferedReader tamponLecture = null; 
            String line = "";
                	try {
                	lectureExe = p.getInputStream();
                			 tamponLecture = new BufferedReader (new InputStreamReader(lectureExe));
     
                			 System.out.println("lecture tampon" + tamponLecture.read());
     
                			 while ((line = tamponLecture.readLine()) != null){
                				 //ce que je veux faire
                				 //line = Integer.toString(valeurOctet);
                				 System.out.println(line);
                			 }
                		 }catch (IOException ex) {
                             Logger.getLogger(ExecuterModelAllom.class.getName()).log(Level.SEVERE, null, ex);
                         }
                		 finally {
                			 try{
                                 tamponLecture.close();
                                 lectureExe.close();
                                 //tamponEcrire.close();
     
                			 } catch (IOException ioe) {
                             ioe.printStackTrace();
                			 }
                		 }
                	}
                 }.start();
     
        		 int reponse = p.waitFor();
        		 System.out.println(reponse);
     
    		}catch (IOException ioe){
                Logger.getLogger(ExecuterModelAllom.class.getName()).log(Level.SEVERE, null, ioe);
            }

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

Discussions similaires

  1. Exécuter une application externe
    Par mawkli dans le forum Langage
    Réponses: 16
    Dernier message: 03/07/2012, 11h55
  2. Exécuter une application externe à Java
    Par Noizet dans le forum Langage
    Réponses: 12
    Dernier message: 15/12/2010, 15h56
  3. Exécuter une application externe avec survie après Java
    Par Claythest dans le forum Général Java
    Réponses: 8
    Dernier message: 20/11/2009, 14h23
  4. Exécuter une application externe pas à pas
    Par leyo666 dans le forum Langages de programmation
    Réponses: 5
    Dernier message: 07/04/2007, 18h41

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