Я написал приложение, которое использует GraphViz для генерации некоторых графиков в формате .gif в соответствии с синтаксисом DOT. Когда я запускаю из Eclipse, изображения генерируются нормально, но когда я экспортирую его как банку, изображения создаются, но в них нет данных. Когда я смотрю их в Microsoft Picture Viewer, это просто красный X.
Это работало как экспортированная банка, пока я не поместил генерацию изображения в его собственный поток. Я не могу понять, что здесь происходит. Есть ли проблемы с экспортом многопоточных проектов? У кого-нибудь есть идеи?
Спасибо
Вот часть кода. Трудно точно определить, что идет не так.
/**
* Writes the graph's image in a file.
* @param img A byte array containing the image of the graph.
* @param to A File object to where we want to write.
* @return Success: 1, Failure: -1
*/
public int writeGraphToFile(byte[] img, File to)
{
try {
FileOutputStream fos = new FileOutputStream(to);
fos.write(img);
fos.close();
} catch (java.io.IOException ioe) { return -1; }
return 1;
}
Вышеуказанная функция вызывается из альтернативного потока этим вызовом.
public void generateMainGraph() {
//create the graph and put it to file name mainGraphCount.gif
GraphViz gv = new GraphViz();
System.out.println("Generating MAIN graph...");
//add the ending } to mainDot
mainDot += "}";
File newGraph = new File("graphs\\main" + Integer.toString(mainGraphCount) + ".gif");
gv.writeGraphToFile(gv.getGraph(mainDot), newGraph);
}
Вот поток, который вызывает функцию, которая вызывает метод generateMainGraph (...).
graphGeneratingThread = new Runnable() {
//This method will run in the timer thread
public void run() {
try {
//Generate the graphs
if (iData.importDataSet()) {
int timeout = 0;
Scanner scan = new Scanner(graphGen.logSource);
while(timeout < 10) {
if(!scan.hasNextLine()) {
Thread.sleep(1000);
timeout++;
} else {
timeout = 0;
graphGen.generateGraph(scan.nextLine()); //This function calls generateMainGraph(...)
if(!beginningButton.isEnabled()) {
enableTivoButtons();
}
}
}
}
} catch(Exception exc) {
System.err.println("GraphGenerationThread Runnable Error: " + exc.getMessage() + "\n");
exc.printStackTrace();
System.exit(1);
}
}
};