簡體   English   中英

如何從java程序運行jar文件和啟動終端?

[英]How to run a jar file and launch terminal from java program?

我想從我的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文件?

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

對於2.要從終端運行它,您可以使用ProcessBuilder或Runtime.exec()在Windows上執行類似的操作:( Windows cmd需要路徑或它不會解析您的通配符)

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

“/ k”使終端保持活動狀態。 “start”打開終端而不是僅執行命令。

使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM