Java无法执行系统命令(Ubuntu)

时间:2012-05-19 13:13:26

标签: java stream

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

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

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

有什么想法吗?

4 个答案:

答案 0 :(得分:4)

您需要使用以下代码:

ProcessBuilder pb = new ProcessBuilder();
pb.command("bash", "-c", "./runCalculator.sh");
Process process = pb.start();
int retValue = process.waitFor();

答案 1 :(得分:3)

您可能需要调用unix命令解释程序/处理器才能使其正常工作。请参阅:When Runtime.exec() won't

答案 2 :(得分:3)

试试这个:

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

答案 3 :(得分:0)

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

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

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

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

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