我想从我的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 :(得分:0)
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");
&#34 / K&#34;使终端保持活动状态。 &#34;开始&#34;打开终端而不是仅执行命令。
使用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