drakken_night
Messages postés6Date d'inscriptionmercredi 15 mars 2006StatutMembreDernière intervention 7 juillet 2006
-
6 juil. 2006 à 13:46
drakken_night
Messages postés6Date d'inscriptionmercredi 15 mars 2006StatutMembreDernière intervention 7 juillet 2006
-
7 juil. 2006 à 10:57
Bonjour à tous,
J'ai un problème très étrange. Mon programme pilote un autre programme
externe et lui fait créer un fichier "résultat". Lors que je veut
"parser" ce fichier résultat, j'ai une nullpointeurexception.
Si je fait :
jtextarea.append("Ouverture du fichier resultat :
"+file.getPath()+"_resultat.txt"+"\n");
File
tempo = new File (file.getPath()+"_resultat.txt");
boolean
tst = tempo.exists();
System.out.println(tst);
Je constate que le chemin du fichier est bon.
Je sais que le fichier existe et n'est pas vide car je peux l'ouvrir
avec un éditeur de texte (donc mon programme externe a bien fait son
travail).
Pourtant le boolean est à false !! Java me dit que le fichier n'existe pas !
J'ai l'impression (stupide j'en convient) que à l'éxécution du
programme, la jvm prend une "capture" du contenu des dossiers et donc
quand je fait un .exists(); plutot que de demander à l'OS il utilise sa
"capture" et donc m'indique que le fichier n'existe pas (alors qu'entre
temps il a été créer ce fichier).
Mon code compile et ne fait pas de message d'erreur. Si je kill mon
programme et que je le relance, le boolean est à true (ce qui corrobore
ma théorie de la capture ???). C'est très étrange je n'y comprend
rien...
Quelqu'un aurait-il une explication ????
Y a t-il une instruction pour forcer la jvm à remettre à jour sa "capture", afin que je puisse ouvrir le fichier "résultat" ?
jtextarea.append("La structure de l'arbre a été mise à jour. Nous vous
conseillons d'enregistrer"+"\n");
jtextarea.append("votre arbre au format nhx et de le
"re-charger"."+"\n");
jtextarea.append("Vous pourriez ainsi activer l'option "Longueur
réelles des branches"."+"\n");
save_button.setVisible(false);
}
catch ( Exception h ) {
jtextarea.append("ERREUR : Le fichier de sortie de GLPK n'a pas pu être
lu, ou est manquant."+"\n");
save_button.setVisible(false);
}
}
catch(Exception e){
jtextarea.append("ERREUR : Le solveur GLPK ne peut être lancé. Vérifier
que le chemin indiqué dans le fichier ini est valide."+"\n");
save_button.setVisible(false);
}
}
catch (Exception e){
jtextarea.append("ERREUR : Le solveur GLPK ne peut
être lancé. Le fichier glpk.ini indiquant son chemin est introuvable ou
illisible."+"\n");
save_button.setVisible(false);
}
}
En gros voila ce que je fait : l'utilisateur indique un fichier ***.lp
dans lequel je fabrique mon script de calcul. J'utilise alors le
logiciel glpk (c'est un solveur d'équation) pour resoudre le problème
(extension lp car il est "codé" en lp), et j'indique à glpk que la
sortie doit se faire dans le fichier ***_resultat.txt
C'est quand je veut parser se fichier que ca marche pas. C'est au
niveau de la ligne indiqué par --------> que ca plante. Le
filereader n'arrive pas à ouvrir le fichier. Pourtant le chemin est
bon, mais comme je l'ai dit avant si je fait .exist() ben il me renvoie
faux. Du coup il sort du bloc "try" et m'affiche direct mon message
d'erreur ERREUR : Le fichier de sortie de GLPK n'a pas pu être lu, ou
est manquant.
En espérant que ce code supplèmentaire vouis aidera.
sheorogath
Messages postés2448Date d'inscriptionsamedi 21 février 2004StatutModérateurDernière intervention29 janvier 201017 6 juil. 2006 à 16:42
ben non il doit pas exister lol
sinon je vois pas pourquoi ca marcherais pas
essai de copier le path dans Explorer et voi si il t'ouvre le fichier texte ^^
"n'est pas mort ce qui semble a jamais dormir et en d'etrange temps meme la mort peut mourrir"
drakken_night
Messages postés6Date d'inscriptionmercredi 15 mars 2006StatutMembreDernière intervention 7 juillet 2006 6 juil. 2006 à 16:56
Ca marche. Le fichier existe bien et le notepad ce lance. Mais bon ca je m'en doutait lol.
La question est : pourquoi ca ne marche pas ? Est-ce parce que le
fichier n'existe pas au moment où je lance le programme ? Est-ce parce
qu'il est créer par un programme externe ? Je pense parce que c'est un
fichier créer par le programme java ca pose pas de problème... Enfin
c'est très étrange.
J'ai essayer de créer un fichier vide, puis de lancer mon programme
externe en mettant le même nom que le fichier vide (donc il l'écrase).
Au niveau du : while ((readStr = buffer.readLine()) != null) { il s'arrête car readStr=null
Bizarre non ?
Personne n'as constaté ce genre de problème ????????
Merci de ton aide sheorogath, j'espère que d'autre prendrons le temps de tester, parce que là je sèche.[auteurdetail.aspx?ID=234347 ]
nightlord666
Messages postés746Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention23 mai 200710 6 juil. 2006 à 21:20
Au lieu d'un sleep(3000), met un process.waitFor() : ça va attendre que le processus soit terminé pour continuer, et ça donnera les deux programmes "en série" comme tu le voulais
//Libère ma mémoire que j'ai utilisé
this->GetCurrentConversation()->FreeAllocatedMemory(REASON_UNUSED);
drakken_night
Messages postés6Date d'inscriptionmercredi 15 mars 2006StatutMembreDernière intervention 7 juillet 2006 7 juil. 2006 à 10:57
Merci de ta réponse nightlord,
En effet j'ai mit un waitfor() (le sleep c'était juste pour tester),
surtout que selon la compléxité de l'arbre phylogénétique le script de
calcul peut mettre 50 milliseconde ou 3 minutes à etre résolu, lol.
En tout cas merci à tous d'avoir prit le temps de me répondre, c'est sympa