【问题标题】:How to run a jar file and launch terminal from java program?如何运行 jar 文件并从 java 程序启动终端?
【发布时间】:2016-12-10 07:42:49
【问题描述】:

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

【问题讨论】:

  • 请提供有关您的 JAR parallel/Parallel.jar 的更多详细信息。如果这个 JAR 需要输入,你应该使用 docs.oracle.com/javase/7/docs/api/java/lang/…
  • 你确定它只是在 Eclipse 中退出(当你提供一个有效的文件名时)而不是等待永远不会来自管道的输入?

标签: java eclipse jar


【解决方案1】:

对于 1。 aug/*.xml 不能这样工作,因为通配符的展开是由 cmd/bash 完成的。如果您想以这种方式使用它,您的 jar 需要能够自行展开该字符串,或者您必须使用 cmd/bash 调用它。 最好让你的 java 程序 Parallel 展开它,这样你就不会失去可移植性。

对于 2。 要从终端运行它,您可以使用 ProcessBuilder 或 Runtime.exec() windows上的类似的东西:(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

【讨论】:

    猜你喜欢
    • 2011-11-27
    • 2013-07-15
    • 2014-02-02
    • 2016-09-23
    • 2015-07-25
    • 2011-02-05
    • 2017-01-03
    • 2013-02-27
    相关资源
    最近更新 更多