java - 如何从java程序运行jar文件并启动终端?

标签 java eclipse 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 文件?

最佳答案

对于 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/

相关文章:

从二次方程中提取系数的Java程序

java - 如何为JUNIT开源做贡献

android - Android 按钮上的边框颜色

java - 无法在ubuntu中创建jar文件

java - 无法从maven中安装的jar加载类

java - 如何禁用前景 View 以在背景上进行 throw 操作

Java 进程生成器 : How to suppress output instead of redirecting it

c - Eclipse CDT pkg-config 插件未在 fedora 上检测到 gtk3

java - eclipse 氧气/氖气 : Unable to build ANT project

linux - 如何找到正在运行的jar文件的路径