J'utilise gnuplot avec Java et il y a ce problème qui m'a rendu fou. Fondamentalement, j'utilise cette fonction pour tracer deux doubles [] tableaux sur le même terrain -Utiliser gnuplot avec Java
public static void plot(String filename,double[] ua1,double[] ua2) throws IOException{
if(ua1.length==0 | ua2.length==0){
System.out.println("This one had no data - " + filename);
return;
}
File fold1 = new File("old");
if(fold1.exists()){
boolean a = fold1.delete();
if(!a)System.out.println("Houstoonnn!!!");
}
fold1 = new File("new");
if(fold1.exists()){
boolean a = fold1.delete();
if(!a)System.out.println("Not deleted!!!");
}
FileWriter outF1 = new FileWriter("old");
FileWriter outF2 = new FileWriter("new");
PrintWriter out1 = new PrintWriter(outF1);
PrintWriter out2 = new PrintWriter(outF2);
for(int j=0;j < ua1.length;j++){
out1.println(ua1[j]);
out2.println(ua2[j]);
}
out1.close();
out2.close();
File fold2 = new File("auxfile.gp");
try{//If the file already exists, delete it..
fold2.delete();
}
catch(Exception e){}
FileWriter outF = new FileWriter("auxfile.gp");
PrintWriter out = new PrintWriter(outF);
out.println("set terminal gif");
out.println("set output \""+ filename+".gif\"");
out.print("set title " + "\""+filename+"\"" + "\n");
out.print("set xlabel " + "\"Time\"" + "\n");
out.print("set ylabel " + "\"UA\"" + "\n");
out.println("set key right bottom");
out.println("plot \"old\" with linespoints,\"new\" with linespoints");
out.close();// It's done, closing document.
Runtime.getRuntime().exec("gnuplot auxfile.gp");
}
L'idée est d'écrire les deux doubles pour séparer les fichiers et les tracer avec gnuplot. Lorsque cette fonction est appelée une seule fois, cela fonctionne très bien. Mais quand je l'appelle à plusieurs reprises à partir d'une boucle, je vois des fichiers vides qui sont produits et d'autres qui sont faux (par exemple, les tracés diminuent parfois alors que je sais qu'ils ne le peuvent pas). Cela fonctionne correctement dans certains cas, donc c'est très aléatoire. Je sais que cela a à voir avec la façon dont je lis et écris les fichiers avant d'appeler gnuplot. Quelqu'un peut-il m'aider à améliorer cette fonction de traçage afin que je ne vois pas ce comportement étrange?
Pourrait être une sorte de condition de concurrence, voir [Java: attendre le processus exec jusqu'à sa fermeture] (http://stackoverflow.com/q/12448882/2604213). – Christoph
Merci Christoph. C'était exactement le problème. J'ai ajouté un Thread.sleep (10) après chaque appel à cette fonction et le problème semble être résolu. –