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

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

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

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

有任何想法吗?

您需要使用以下代码:

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

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

尝试这个:

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

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

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

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

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

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