2016-08-04 85 views
1

我想從我的java程序運行jar文件。如何從java程序運行jar文件和啓動終端?

ProcessBuilder pb = new ProcessBuilder("java", "-jar", "parallel/Parallel.jar", "aug/*.xml"); 
Process p = pb.start(); 
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); 
String s = ""; 
while((s = in.readLine()) != null){ 
    System.out.println(s); 
} 
int status = p.waitFor(); 
System.out.println("Exited with status: " + status); 

以下是錯誤日誌中我得到:

[33mProblem found trying to create the log file[0m 
[31mCannot locate configuration source aug/*.xml[0m 
[31mNo files to work with[0m 
Exited with status: 1 

問題1:我用整個文件名試過*而不是和它的作品。但是,我想在該目錄下的所有文件上運行該jar。

問題2:運行時,jar文件會要求輸入「繼續」或「取消」。但是jar程序只是在Eclipse控制檯中退出,而沒有給我機會輸入任何東西。所以,我想知道是否有辦法在終端中啓動jar文件?

+0

請提供有關JAR'parallel/Parallel.jar'的更多詳細信息。如果這個JAR需要輸入,你應該使用http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html#getOutputStream() –

+0

你確定它只是在Eclipse中退出(當你提供一個有效的文件名),而不是等待從來沒有來自管道的輸入? – RealSkeptic

回答

0

For 1. aug/*。xml不能這樣工作,因爲通配符的展開是由cmd/bash完成的。如果你想以這種方式使用它,你的jar需要能夠展開這個字符串本身,或者你必須使用cmd/bash來調用它。 這將是最好讓你的Java程序並行展開這個,這樣你就不會失去可移植性。

對於2. 從終端可以使用的ProcessBuilder或的Runtime.exec() 類似的東西在Windows上運行它:(CMD窗口所需要的路徑,否則將無法解決您的通配符)

Process process = Runtime.getRuntime().exec("cmd /k start java -jar <path>/Parallel.jar <path>/aug/*.xml"); 

」/ k「使終端保持活動狀態。 「開始」打開終端而不是僅僅執行命令。

用的ProcessBuilder它應該是這樣的:

ProcessBuilder pb = new ProcessBuilder("cmd", "/k", "start", "java", "-jar", "<path>/Parallel.jar", "<path>/aug/*.xml"); 

對於bash這將是沿着線:

ProcessBuilder pb = new ProcessBuilder("sh", "-c", "java", "-jar", "<path>/Parallel.jar", "<path>/aug/*.xml"); 

進一步閱讀有關的ProcessBuilder /的Runtime.exec()我建議: http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html