2013-02-21 45 views
2

我試圖運行Java程序的JAR文件和我成功使用getRuntime():當我嘗試使用ProcessBuilder的ProcessBuilder無法找到指定的文件,而過程可以

Process processAlgo = Runtime.getRuntime().exec("java -jar "+algoPath); 

但是我得到的The system cannot find the file specified例外:

ProcessBuilder builder = new ProcessBuilder("java -jar " + algoPath); 
Process processAlgo = builder.start(); 

我試圖改變指定文件的位置,並且還指出了它的完整路徑,但它不起作用。什麼會導致這個問題?

回答

8

ProcessBuilder預計它的參數要分別傳入。

也就是說,對於每個命令和參數,ProcessBuilder預計將其視爲單獨的參數。

目前你告訴它運行「java -jar algoPath的價值是什麼」......從ProcessBuilder的角度來看,這是一個無效的命令。

的Try ...

ProcessBuilder builder = new ProcessBuilder("java", "-jar", algoPath); 
Process processAlgo = builder.start(); 

相反。

如果algoPath包含空格(即多於一個參數),則它們也需要分成單獨的參數,否則程序將不會執行,因爲Java會將algoPath看作單個參數。

檢查JavaDocs更多細節

+0

就是這樣。謝謝! – 2013-02-21 10:17:02

+0

唷,因爲它嚇到我了第一;) – MadProgrammer 2013-02-21 10:18:03

+0

...如果你有你的命令外部存儲爲一個字符串資源,你可能想要使用commad.split(「」) – 2015-09-25 05:53:09

0

是通過「Java」應該是你的第一個參數,和所有其他的說法已經在其他參數發送。

我在執行這一行「bash /path/script.sh arg1 arg2」時遇到了問題... 因爲我傳遞的第一個參數是「bash /path/script.sh」,「arg1」,「 arg3「...得到JAVA找不到的Exception:Command。

當我在參數中分隔每個元素,然後工作正常。 「bash」,「/ path/script」,「arg1」,「arg2」。

相關問題