我想从我的 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”使终端保持 Activity 状态。 “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
关于java - 如何从java程序运行jar文件并启动终端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38763012/