如何从java程序运行jar文件和启动终端?
问题描述:
我想从我的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文件?
答
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
请提供有关JAR'parallel/Parallel.jar'的更多详细信息。如果这个JAR需要输入,你应该使用http://docs.oracle.com/javase/7/docs/api/java/lang/Process.html#getOutputStream() –
你确定它只是在Eclipse中退出(当你提供一个有效的文件名),而不是等待从来没有来自管道的输入? – RealSkeptic