2012-06-01 51 views
0

我在運行gnuplot進程時遇到了一些麻煩。我正在創建一個gnuplot腳本文件,然後從一個java程序中運行它。我嘗試過使用Process Builder和使用Runtime.getRuntime()。exec(「blah blah ...」)構建一個進程,但都沒有完整的工作能力。有趣的是,只要我通過gnuplot創建的映像文件沒有被保存到沒有名稱空間的目錄中,使用Runtime就可以使這個過程幾乎完美地工作。然而,ProcessBuilder完全不起作用,並且給我提供了以下錯誤:「CreateProcess error = 2,系統找不到指定的文件」從Java運行gnuplot進程有問題

這讓我花了很長時間才弄清楚這些東西,所以任何幫助將不勝感激。

我使用的代碼是在這裏:

File script = new File("Demo.plt"); //Script file that outputs to a PNG file 

//This works as long as the script file doesn't output to a png with a space in it's filepath 
Process aProcess = Runtime.getRuntime().exec("gnuplot " + script.toString()); 
Thread.currentThread().sleep(1000); 
aProcess.waitFor(); 

//This doesn't work at all 
ProcessBuilder builder = new ProcessBuilder("gnuplot " + script.toString()); 
builder.redirectErrorStream(true); 
Process process = builder.start(); 

而且我知道,如果的Java之外運行,無論在輸出線中的空間的腳本工作。我甚至嘗試過使用'\'(轉義字符作爲空格),這也不起作用。事實上,這裏是我使用的代碼:

String graphName = "DemoGraph"; 
//Isolate the FilePath 
String path = script.getPath(); 
path = path.replace(script.getName(),""); 
path = path.replace(File.separator, "\\\\"); //Gets around any parsing errors in filepaths on Windows 
path = path.replace(" ", "\\ "); //Should get around parsing errors with spaces in gnuplot, but it seems to be irrelevant. 

scriptFileWriter.write("set output \"" + path + graphName + ".png\"\r\n"); 

它一定是用java的問題,因爲腳本從Windows命令行中運行,並從gnuplot的命令行,FRUN被雙重運行 - 點擊

+0

你從gnuplot得到錯誤信息嗎?除了「我在路徑名中有空格時我沒有在我想要的目錄中有一個png文件」之外,還有其他問題。 – mgilson

+0

另外,我不知道Java,但可以打印字符串''set output \「」+ path + graphName +「.png \」\ r \ n「',以便我們可以看看gnuplot正在看? – mgilson

+0

這是字符串:「設置輸出目錄‘C:\\ \\用戶\\湯姆斯文件\\ \\的NetBeansProjects \\ DRTTPS模擬\比較\\ DemoGraph.png’」 我沒有收到來自任何的Gnuplot錯誤信息我可以看到,我不知道如何將它的錯誤流轉發到標準錯誤,以便我可以看到它。 真的沒有其他症狀,除了它甚至不創建目標文件。我之前有過的其他錯誤讓它創建了一個文件,但沒有寫入它,但是這個錯誤並沒有做到。 – Andrew

回答

1

我忘了在文件名周圍加引號。這是一個STUPID錯誤。