2013-02-21 40 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”。

相关问题