2016-12-17 198 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終端中那樣輸入行。