我在運行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被雙重運行 - 點擊
你從gnuplot得到錯誤信息嗎?除了「我在路徑名中有空格時我沒有在我想要的目錄中有一個png文件」之外,還有其他問題。 – mgilson
另外,我不知道Java,但可以打印字符串''set output \「」+ path + graphName +「.png \」\ r \ n「',以便我們可以看看gnuplot正在看? – mgilson
這是字符串:「設置輸出目錄‘C:\\ \\用戶\\湯姆斯文件\\ \\的NetBeansProjects \\ DRTTPS模擬\比較\\ DemoGraph.png’」 我沒有收到來自任何的Gnuplot錯誤信息我可以看到,我不知道如何將它的錯誤流轉發到標準錯誤,以便我可以看到它。 真的沒有其他症狀,除了它甚至不創建目標文件。我之前有過的其他錯誤讓它創建了一個文件,但沒有寫入它,但是這個錯誤並沒有做到。 – Andrew