4

我正在尝试从 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();

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

4

2 回答 2

10

ProcessBuilder期望它的参数单独传入。

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

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

尝试...

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

反而。

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

检查JavaDocs以获取更多详细信息

于 2013-02-21T10:13:47.430 回答
0

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

我在执行“bash /path/script.sh arg1 arg2”这一行时遇到问题...因为我传递的第一个参数是“bash /path/script.sh”、“arg1”、“arg3”...得到 Exception: Command not found by JAVA。

当我在参数中分离每个元素时,然后工作正常。“bash”、“/路径/脚本”、“arg1”、“arg2”。

于 2015-02-27T19:11:25.010 回答