2012-02-22 127 views
3

獨立是Runtime.getRuntime()。exec()平臺獨立的嗎?

Runtime.getRuntime().exec("cmd /c"); 

平臺或我必須在參數傳遞平臺特定的命令?

感謝


什麼是Linux等價的命令cmd /c start /b java -jar

+1

CMD是Windows命令....並不適用於其他操作系統 – VirtualTroll 2012-02-22 16:19:13

+1

你覺得呢? Java不能提供映射表,因爲它不可能在所有不同的OS之間進行映射。 – home 2012-02-22 16:19:39

回答

7

調用Runtime.getRuntime()。EXEC()是在這樣的平臺獨立的,它會在每次啓動外部可執行文件平臺。當然,可執行文件本身必須存在,因此在Linux上啓動notepad.exe很可能不起作用(除非安裝了Wine和Notepad,但這是另一回事)。

在Windows上,輸入任何要輸入cmd.exe的內容(詳情請參見下文)。但要做到在Windows自動路徑查找,你需要做的是這樣

Runtime.getRuntime().exec("start iexplore.exe"); 

Runtime.getRuntime().exec("start my.pdf"); 
其打開與關聯的查看器PDF文件

在Linux上,你可以做任何事情,你會像猛砸殼做的,但你不能使用bash內建像管道運營商。您可以啓動程序並傳遞參數。

在Linux上啓動另一個Java實例,你可以使用:

Runtime.getRuntime().exec(new String[] {"java","-jar","myjar.jar"}); 

,如果它是不是在路徑中使用絕對路徑Java可執行文件。

+0

感謝您的回覆。你能告訴我什麼是'cmd/c start/b java -jar jarfile.jar'的linux相當於 – 2012-02-22 16:23:25

+1

添加了這個答案。 – Daniel 2012-02-22 16:27:17

3

它不是平臺獨立的。對於您所針對的每個操作環境,您需要一個外部命令版本。

1

Runtime.getRuntime().exec()是獨立平臺。 cmd /c是。你期望在Unix上運行cmd /c

所以,你如果你想運行外部命令的跨平臺計劃,以保持特定於平臺的命令。

+0

謝謝。 Linux中的cmd/c start/b java -jar相當於什麼? – 2012-02-22 16:25:47

1

它取決於平臺。引述relevant javadoc重點礦山)的部分:

該cmdarray此方法檢查是有效的操作系統命令。 哪些命令是有效的取決於系統,但至少該命令必須是非空字符串的非空列表。

1

當然不是,你正在執行一個shell命令。除非你沒有其他更乾淨的方式來做你想做的事情,否則我不建議你像使用Java那樣做。它違背了Java的便攜性目的。