首页 >Java >java教程 >Runtime.exec() 与 ProcessBuilder:为什么我的命令退出并显示代码 1001?

Runtime.exec() 与 ProcessBuilder:为什么我的命令退出并显示代码 1001?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-29 13:32:09698浏览

Runtime.exec() vs ProcessBuilder: Why Does My Command Exit with Code 1001?

ProcessBuilder 与 Runtime.exec():比较

从 Java 执行外部命令时,开发人员经常会在使用 Runtime 之间遇到困境。 getRuntime().exec(...) 和 new ProcessBuilder(...).start()。为了阐明这两种方法之间的差异,让我们详细检查它们的行为。

案例研究

在 Runtime.exec() 和ProcessBuilder 被用来执行特定的命令,出现了显着的差异。使用 Runtime.exec(),命令成功终止,退出值为 0。但是,使用 ProcessBuilder 时,退出值为 1001,命令提前终止。

根本原因

差异在于 exec() 和 ProcessBuilder 处理命令参数的方式。 exec() 接受单个字符串或字符串数​​组,将输入标记为参数。相反,ProcessBuilder 需要一个 varargs 字符串数组或一个 List,其中每个元素都被视为一个单独的参数。

解决方案

解决该问题使用 ProcessBuilder,确保命令参数作为单独的字符串提供。例如,不要使用以下内容:

Process p = new ProcessBuilder(
    "C:\DoStuff.exe -arg1 -arg2"
).start();

使用此:

Process p = new ProcessBuilder(
    "C:\DoStuff.exe", "-arg1", "-arg2"
).start();

或者,您可以创建一个 List并将其传递给 ProcessBuilder,如下所示:

List<String> params = Arrays.asList("C:\DoStuff.exe", "-arg1", "-arg2");
Process p = new ProcessBuilder(params).start();

以上是Runtime.exec() 与 ProcessBuilder:为什么我的命令退出并显示代码 1001?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn