Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1052 connectés 

  FORUM HardWare.fr
  Programmation
  Java

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1765041
ib@w
Posté le 25-07-2008 à 18:24:32  profilanswer
 

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
mood
Publicité
Posté le 25-07-2008 à 18:24:32  profilanswer
 

n°1765389
aconcagua
Posté le 27-07-2008 à 12:26:18  profilanswer
 

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.

n°1765601
guiguivts
Posté le 27-07-2008 à 21:54:59  profilanswer
 
n°1765681
burgergold
5$? va chez l'diable!
Posté le 28-07-2008 à 03:00:18  profilanswer
 

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

n°1766156
ib@w
Posté le 28-07-2008 à 23:50:39  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

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

 

Sujets relatifs
[Résolu] Excel - Prendre les X plus proche d'un nombre[C] [Résolu] Correspondance entre un pointeur et un "vrai" tableau
[Résolu] [javascript] [firefox] .innerhtml = tronqué[RESOLU] Open Office Basic : Problème for each
[Résolu] Obtenir la description (nom) d'un executable[résolu] fgets et imlib_load_image
A l'aide, bloqué dans Flash par Actionscript[VBA] Explications des références (librairies) -> RESOLU
[résolu] Boucle fichier dans un repertoire 
Plus de sujets relatifs à : [résolu] waitFor() qui reste bloqué...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR