2014-01-24 51 views
0

運行另一個java程序的正確方法我想運行在Java應用程序下面的shell命令:從Java

java -jar saxon9he.jar -warnings:fatal a.xml a.xsl param1=123 param2=abc 

目前,我只是執行這個作爲使用

ProcessBuilder pb = new ProcessBuilder(commandLineParts); 
[...] 
Process process = pb.start(); 
一個shell命令

在java中這樣做的正確方法是什麼?

+4

總是有選項把jar放在你的類路徑上,並以編程方式調用main方法。 –

+0

META-INF/MANIFEST.MF中定義的主要方法;用7zip左右打開罐子。 –

+0

您認爲關於使用ProcessBuilder有什麼不正確的地方? – Raedwald

回答

4

這是在Java中執行命令的正確方法。只是爲了清除可能的混淆:ProcessBuilder不會使用shell執行程序。這就是爲什麼你必須爲它提供一個參數列表而不是一個單一的字符串(這將被shell解析)。

有兩種可能性:

  • 無論你想在一個新的JVM運行Java程序,然後使用 的的ProcessBuilder是路要走
  • 或者你不介意它是在同一個JVM執行,然後可以自行調用主方法肖恩表明(可能在不同的線程)

另一種選擇,這取決於應用的類型,將與應用程序執行某些雜技服務r開始在它的應用程序。

如果您使用的ProcessBuilder只是要小心有關處理其輸入和輸出流 - 如果你不處理這些應用程序可以掛起:Java ProcessBuilder: Input/Output Stream這在Java中得到了改進7.