Après avoir lu le blog d'adiGuba (un grand merci !) j'en renvoie à mon histoire de Lancement d'un batch.
Mon problème maintenant, c'est de récupérer les flux. Avant, avec Runtime.exec(), je faisais :
et pareil pour le stream d'erreur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 String ligneOK; BufferedReader sortie = new BufferedReader(new InputStreamReader(proc.getInputStream())); while ( (ligneOK = sortie.readLine()) != null ) { this.log(" "+ligneOK); } sortie.close();
Mais maintenant, (avec l'aide donc d'adiGuba et de mon ancien post), je tente de faire la même chose, mais j'obtiens une erreur "Stream closed".
La partie
n'est donc pas intéressante puisque je ne veux pas des fichiers.
Code : Sélectionner tout - Visualiser dans une fenêtre à part monPC.output( new FileOutputStream("out.txt") ).error( new FileOutputStream("err.txt") )
Cependant, les fichiers sont crées, donc ça marche.
J'essaie donc
mais du coup, je ne sais pas du tout comment traiter mes "BufferedReader sortie" (celui du runtime.exec() normal).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 // On crée les StringBuilder qui contiendront les sorties du process : StringBuilder out = new StringBuilder(); StringBuilder err = new StringBuilder();
Je tiens à préciser que je ne maitrise pas du tout toutes ces notions de buffer, et que je sais pas trop quoi chercher
[Edit]
Après un peu plus de recherche, et toujours sur le blog, je test :
mais le
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 PipedReader lignesOk = new PipedReader(); PipedReader lignesErr = new PipedReader(); pc.output(new PipedWriter(lignesOk)).error(new PipedWriter(lignesErr));
reste toujours bloqué, comme avant
Code : Sélectionner tout - Visualiser dans une fenêtre à part pc.consume()(comme par un ancien proc.waitFor()), et apparement toujours au moment du remplissage des flux. Je me doute que le problème vient de la ligne de commande, mais pourquoi dans le cas de fichiers, ça marche, alors qu'avec des readers/writer ça ne marche plus ???
Suis-je obligé de passer par des fichiers temporaires que je lirais après le "monPC.consume()" ?
Partager