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 :

lancement programme externe bizarre


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Par défaut lancement programme externe bizarre
    bonjour,

    j'essai desesperement de lancer une appli exe a partir de mon programme java. J'ai deja fait ca une fois et ca avait marché nickel.
    J'ai donc repris le meme modele.

    Mon probleme ici est :
    Je dois lancer une appli exe a partir du java. cette appli a besoin d'un fichier d'entrée et doit me generer 3 fichiers resultats.

    J'ai donc fait comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try {
      Process p = null;
      Runtime r = Runtime.getRuntime();
      p = r.exec("C:\\appli.exe < fichierentree.txt" );
      int x = p.waitFor();
    } catch(Exception  appli){
      appli.printStackTrace();
    }
    Le probleme est que ca reste bloqué sur le waitFor (le processus de mon appli est toujours actif dans le gestionnaire des taches)
    Je n'ai pas mes 3 fichiers de sorties...

    Si j'enleve le waitFor, l'appli est libéré mais je n'ai pas mes 3 fichiers de sorties
    Si je fais la meme chose sous dos avec le meme fichier d'entrée ca marche nickel, j'ai mes 3 fichiers de sorties.

    De plus sous dos, cette appli renvoie pas mal de ligne montrant le deroulement du traitement. j'ai donc essayé de recuperer ces lignes dans mon prog java de cette facon :
    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
    try {
      Process p = null;
      Runtime r = Runtime.getRuntime();
      p = r.exec("C:\\appli.exe < fichierentree.txt" );
    InputStream i_stream=p.getInputStream();
    			InputStreamReader reader=new InputStreamReader(i_stream);
     
    			String res="";
     
    			BufferedReader bf_reader= new BufferedReader(reader);
    			while (bf_reader.ready()) {
    			res+=bf_reader.readLine()+"\n";
    			}
    			System.out.println("resultat :" +res);
      int x = p.waitFor();
    } catch(Exception  appli){
      appli.printStackTrace();
    }
    Ca reste toujours bloqué sur le waitFor (normal) mais rien ne s'affiche.

    J'ai essayé de lancer WORD en remplacant le chemin de mon appli par celui de word et ca marche au poil.

    Si quelqu'un pouvait m'aider...

    Merci par avance de vos reponses

    Edenyorke

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


    Sous DOS tu utilises un shell qui interprète une ligne de commande complexe (notamment avec des redirections < et > ).
    Runtime ne permet que de lancer des programmes avec des paramètres. Il ne gère ni les redirections, ni les autres syntaxes disponible sous un shell...

    Donc si tu veux passer du contenu à ton application tu dois utiliser la méthode getOutputStream()...

    De plus il faut toujours utiliser ou fermer tous les flux du process afin d'éviter de tel blocage...

    Plus d'info :


    a++

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Par défaut
    J'ai bien lu Runtime.exec() n'est pas des plus simple...

    Je pars donc sur l'idee du ProcessComsumer.
    J'ai donc recupéré le jar de la classe shell, que j'ai ajouté a mon projet eclipse
    (mon-projet -> properties -> java build path -> libraries -> add external jar -> shell.jar)

    Mais quand j'ajoute import shell.ProcessConsumer;
    La methode ProcessConsumer reste inconnue

    Il y a t il un autre moyen d'ajouter des librairies ?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 83
    Par défaut
    J'ai rien dit j'ai trouvé

    Je vais tester ca de suite

  5. #5
    Expert éminent
    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
    Billets dans le blog
    1
    Par défaut
    Si tu utilises l'API Shell tu peux directement utiliser la classe Shell, par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shell.system("C:\\appli.exe < fichierentree.txt");
    (Les sorties de ton applications seront redirigées vers System.out et System.err)


    Sinon tu peux créer une instance de la classe Shell pour manipuler plus précisément les flux d'entrée/sortie... (il faudrait que je fasse une petite doc là dessus... )

    a++

Discussions similaires

  1. Lancement programme externe
    Par manticore dans le forum Général Python
    Réponses: 4
    Dernier message: 31/05/2010, 12h07
  2. Lancement programme externe
    Par fennec62 dans le forum Général Python
    Réponses: 2
    Dernier message: 24/10/2008, 19h42
  3. Réponses: 2
    Dernier message: 12/07/2006, 08h44
  4. [Linux] Problème de lancement d'un programme externe
    Par kitsune dans le forum API standards et tierces
    Réponses: 6
    Dernier message: 17/05/2006, 18h40
  5. Lancement d'un programme externe
    Par vinzzzz dans le forum Windows
    Réponses: 1
    Dernier message: 05/05/2006, 14h19

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