2013-05-06 139 views
1

在Linux(Debian的)很好,我可以運行此命令:不能用的ProcessBuilder運行程序,運行命令行

/usr/lib/jvm/jdk1.7.0_21/bin/java -jar ~/myjar.jar ".*" 

我試圖用,而不是從一個Java程序運行:

ProcessBuilder pb = new ProcessBuilder(java, "-jar", "~/myjar.jar", "\".*\""); 

System.out.println(pb.command());打印以下,符合市場預期:

[/usr/lib/jvm/jdk1.7.0_21/bin/java, -jar, ~/myjar.jar, ".*"] 

不過,我不會從日得到的結果相同e程序(它運行但輸出看起來好像沒有適當考慮".*"參數)。

任何想法,爲什麼它不工作?

注意:相同的代碼在Windows上正常工作。

+0

不要使用的ProcessBuilder嚴重,因爲它不是穩定的,很容易失敗的命令複雜的輸出如'mvn build'。在可能的情況下使用shell腳本 – Amos 2017-11-12 09:15:50

+0

@Amos只要流程流消耗 - 我不知道你指的是什麼穩定性問題,我會定期使用ProcessBuilder處理大輸出的命令,不會有任何問題。 – assylias 2017-11-12 09:22:37

+0

Hello assylias,早先我們使用ProcessBuilder運行mvn(maven)命令,它通常會卡住,ProcessBuilder永遠停在那裏 – Amos 2017-11-12 09:26:03

回答

6

看起來通配符不是使用glob展開的。您可以使用,而不是一個shell:

ProcessBuilder pb = 
     new ProcessBuilder("bash", "-c", "java -jar ~/myjar.jar \".*\""); 

,也可以刪除周圍的通配符雙引號:

ProcessBuilder pb = new ProcessBuilder(java, "-jar", "~/myjar.jar", ".*");