[résolu] waitFor() qui reste bloqué...

waitFor() qui reste bloqué... [résolu] - Java - Programmation

Marsh Posté le 25-07-2008 à 18:24:32    

Bonjour,
 
Sous java, je lance une commande unix pour comparer deux fichiers (cf ci-dessous). Cela fonctionne quand les fichiers sont correctement remplis. Par contre, si je mets à blanc le fichier 1. Le waitFor reste bloqué. Je ne comprends pas pourquoi (en faisant la commande dans un terminal, elle fonctionne et me retourne tout le contenu du fichier 2, logique !).
 
D'où mes 2 questions :
- quelqu'un sait-il pourquoi ça bloque ?
- quel serait le moyen de sortir du waitFor ?
 
Voilà mon petit bout de code :
       // Calcul des differences      
        String myCommande = "diff -C 0 " + fichier1 + " " + fichier2;
        Runtime myRuntime = Runtime.getRuntime();
        Process myProc = myRuntime.exec( myCommande );
 
        // Recuperation du code retour de la commande
        codeRetour = myProc.waitFor();

 
@+


Message édité par ib@w le 01-08-2008 à 15:57:28
Reply

Marsh Posté le 25-07-2008 à 18:24:32   

Reply

Marsh Posté le 27-07-2008 à 12:26:18    

C'est logique. "Tout le contenu du fichier 2", çà doit faire pas mal d'octets. Du coup le buffer (Process.getInputStream() ) doit être plein et diff attend patiemment que tu en lises un peu avant de continuer.
 
L'utilisation de Runtime.exec n'est pas simple. Généralement, on crée un Thread qui lit l'output au fur et à mesure, même chose pour le flux d'erreur.
 
En gros, qqchose comme :
 
Process p = Runtime.getRuntime().exec(myCommande);
StreamPumper errorPumper = new StreamPumper( p.getErrorStream() );
StreamPumper outPumper = new StreamPumper( p.getInputStream() );
new Thread( errorPumper ).start();
new Thread( outPumper ).start();
InputStream input = p.getInputStream();
p.waitFor();
 
StreamPumper, à l'origine vient de ant. Tu dois pouvoir en trouver une implémentation facilement (attention à respecter la licence).
 
Dans apache commons, il y a commons-exec mais je crois qu'il n'y a jamais eu de release.

Reply

Marsh Posté le 27-07-2008 à 21:54:59    

Reply

Marsh Posté le 28-07-2008 à 03:00:18    

regarde plutot pour faire des checksum sur les 2 fichiers et les comparer? ca me parait plus clean

Reply

Marsh Posté le 28-07-2008 à 23:50:39    

Ok, merci beaucoup pour vos réponses !
J'ai utilisé un thread, ça fonctionne très bien.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed