2016-12-17 219 views
1

自从我正在查找已经有相当长的一段时间了,但我找不到解决方案。我试图在.jar文件中的Linux上执行bash命令。 对于这一点,我尝试过很多事情,包括这个:在java程序中执行bash命令

Process p = new ProcessBuilder("java", "-jar", "M1_MIAGE_PDL_VIZ_GROUPE3.jar", "menu").start(); 
Runtime.getRuntime().exec("/bin/sh -c java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu"); 
Runtime.getRuntime().exec(new String[]{"/bin/sh -c", "java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu"}); 

所以,当我点击.jar文件,我想该程序打开一个庆典,并执行命令(Java的罐子。 ..),执行程序的另一部分。

任何想法如何做到这一点?

回答

4

要理解这一点,首先需要了解如何在shell提示符下运行该命令。

$ sh -c "java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu" 

请注意双引号的位置。第一个参数是-c。第二个参数是引号内的内容;即java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu

现在,我们翻译成Java的:

Process p = new ProcessBuilder(
    "/bin/sh", 
    "-c", 
    "java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu").start(); 

说了这么多,上面并没有真正实现任何东西。当然,它不会打开全新的控制台窗口来显示控制台输出等。与Windows“CMD.exe”不同,UNIX/Linux shell不提供控制台/终端功能。为此,您需要使用“终端”应用程序。

例如,如果您使用的是GNOME

Process p = new ProcessBuilder(
    "gnome-terminal", 
    "-e", 
    "java -jar M1_MIAGE_PDL_VIZ_GROUPE3.jar menu").start(); 

将(可能)做你正在尝试做的。

+0

感谢您的回答。但我仍然有问题。我看到gnome终端开放,但它直接关闭后。我试图在调用进程后插入waitFor()方法,但没有奏效。 –

+0

尝试在“java ...”命令字符串的末尾添加“; sleep 60”。或者,查看是否有一个(许多)备用终端仿真器有一个不立即退出的选项。 –

+0

问题是,当我打开一个终端时,它会在/ home/user目录中打开。我将在java -jar命令之后插入绝对路径,程序将正常工作。谢谢你的帮助 ! :) –

-1

我认为最简单的方法是创建一个shell脚本(.sh扩展名),然后在Java程序中轻松地运行它。 关于如何在Java here中运行shell脚本,以前的问题有一个很好的答案。

要创建一个shell脚本,您可以使用任何文本编辑器并创建一个扩展名为.sh的文件,只需像在bash终端中那样输入行。