ProcessBuilder在Process可以找不到指定的文件

时间:2013-02-21 10:08:33

标签: java process processbuilder

我正在尝试从Java程序运行jar文件,并且我成功使用getRuntime()

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

但是,当我尝试使用ProcessBuilder时,我收到The system cannot find the file specified例外:

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

我尝试更改指定文件的位置,并指示其完整路径但不起作用。什么可能导致问题?

2 个答案:

答案 0 :(得分:9)

ProcessBuilder期望它的参数分别传入。

也就是说,对于每个命令和参数,ProcessBuilder都希望将其视为一个单独的参数。

目前你告诉它运行“java -jar algoPath的价值是什么”......从ProcessBuilder的角度来看,这是一个无效的命令。

...试

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

相反。

如果algoPath包含空格(即多于一个参数),则需要将它们分成单独的参数,否则您的程序将无法执行,因为Java会将algoPath视为单个参数。

查看JavaDocs了解详情

答案 1 :(得分:0)

是的,“java”应该是你的第一个参数,而其他每个参数都必须在其他参数中发送。

执行此行时遇到问题“bash /path/script.sh arg1 arg2”... 因为我传递的第一个参数是“bash /path/script.sh”,“arg1”,“arg3”......得到异常:JAVA找不到命令。

当我将每个元素的参数分开时,工作正常。 “bash”,“/ path / script”,“arg1”,“arg2”。