2

这不是我第一次尝试从 Java 执行系统命令。但这一次证明是非常困难的。我有一个可以从终端正常执行的脚本。它从文件 (input.txt) 读取输入,对其进行处理并将结果导出到另一个文件 (ouput.txt)。整个过程持续不超过1秒。但是,当我尝试从 Java 执行它时,它会卡住并且永远不会完成。这是我的代码:

Process p = new ProcessBuilder("./runCalculator.sh").start();
p.waitFor();

我也试过,Runtime.getRuntime().exec("./runCalculator.sh")但都一样。我已经阅读了进程的 InputStream 和 ErrorStream 。错误流只返回一条消息,例如“开始计算...”

有任何想法吗?

4

4 回答 4

4

您需要使用以下代码:

ProcessBuilder pb = new ProcessBuilder();
pb.command("bash", "-c", "./runCalculator.sh");
Process process = pb.start();
int retValue = process.waitFor();
于 2012-05-19T13:16:58.227 回答
3

您可能需要调用 unix 命令解释器/处理器才能使其工作。请参阅:当 Runtime.exec() 不会

于 2012-05-19T13:14:32.613 回答
3

尝试这个:

Process p = new ProcessBuilder("sh ./runCalculator.sh").start();
于 2012-05-19T13:15:28.347 回答
0

另一个更简单的解决方案是,您可以通过输入程序名称(假设已安装程序)来打开程序,而不是创建脚本并调用它。

请注意,程序的名称并不总是您在 Gnome 的菜单中看到的,例如 Gnome 的计算器是“gnome-calculator”。

关于这个事实,您可以通过以下行运行计算器:

Process p = Runtime.getRuntime().exec("gnome-calculator");

在这种情况下,您不需要任何 sh 脚本(在您的情况下为 runCalculator.sh)。

于 2013-10-28T16:18:33.050 回答