Bonjour,
Voila je suis dans une impasse et je ne comprends pas vraiment d'ou vient mon erreur.
Mon application apelle un programme c via la console (je trouve cela plus facile que d'interfacer du c dans du java avec des jni). Ce programme prends en parametre deux fichiers contenant des sequences (pouvant aller à 100000 caracteres). Je recupere le flux de sortie de la commande, et créé un nouveau fichier où stocker les données sortantes.
Voila le bout de code
Runtime runtime = Runtime.getRuntime();
Process process = runtime.exec("../bin/sim4 ../files/genome.fasta ../files/sequences.fasta A=3");
final BufferedInputStream in = new BufferedInputStream(process.getInputStream());
final OutputStream out = new FileOutputStream("../files/tmp.txt");
final BufferedReader br = new BufferedReader ( new InputStreamReader(in));
Thread t = new Thread(){
public void run()
{
byte [] buffer;
String s;
try {
while ( ( s = br.readLine () ) != null ) {
System.out.println(s);
buffer = s.getBytes();
out.write( buffer );
out.write('\n');
}
out.close();
}
catch ( Exception e )
{System.out.println(e.getMessage());}
}
};
if ( process.waitFor() != 0 ) {
throw new Exception ( "erreur" );}
else {
t.start();
System.out.println("fin");
}
Le probleme est que lorsque la taille d'un des fichiers passé en parametres (par exemple sequences.fasta) est trop grande, l'application reste bloqué: elle attend.
Si je retire le waitFor, l'application est debloqué est tourne sans erreur...le probleme c'est que bien sûr le fichier de sortie de resultats n'est pas mis à jour à temps et je dois attendre un certain temps avant de pouvoir y lire quoi que ce soit; c'est assez genant sachant que la suite de mon code est le parcours de ce fichier afin d'en extraire de l'information.
J'avoue ne pas savoir pourquoi le logiciel ce comporte comme ca pour des fichiers de grande taille sacahnt en console ordinaire, tout marche normalement bien sur.
Si quelqu'un peu m'expliquer quelle est mon erreur, ou une astuce pour palier a ce problème...
Merci beaucoup
Partager