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
List<String> params = Arrays.asList("C:\DoStuff.exe", "-arg1", "-arg2"); Process p = new ProcessBuilder(params).start();
以上是Runtime.exec() 与 ProcessBuilder:为什么我的命令退出并显示代码 1001?的详细内容。更多信息请关注PHP中文网其他相关文章!