我想在我的java代码中使用jar文件Command.jar。当我从命令行运行Command.jar时 像这样的java -jar Command.jar“Param1”它运作良好。但是当我尝试使用Process builder或Runtime.getRuntime()在我的java代码中运行它时,exec它不起作用。
我试过了 -
List <String> command = new ArrayList<String>();
command.add("java -jar");
command.add("Command.jar");
command.add("Param1");
ProcessBuilder builder = new ProcessBuilder(command);
try {
Process process = builder.start();
} catch (IOException e) {
}
它不起作用。我也试过这个:
Runtime.getRuntime().exec("java -jar Command.jar Param1");
但没有运气。请告诉我我做错了什么
答案 0 :(得分:0)
它不起作用
没有告诉我们如何帮助您。您需要向我们提供错误消息或不良结果。使用System.out.println
来帮助您调试和缩小问题范围。
从我的个人经验和其他问题可以猜到,当您手动运行它时,您可能在命令提示符下运行了一些cd "Directory\With\Path\To\Jar"
命令。您需要对Runtime.getRuntime().exec
执行相同的操作,或将jar放在exec
默认位置的位置。
答案 1 :(得分:0)
这是不正确的:
command.add("java -jar");
应该是
command.add("java");
command.add("-jar");
但也可能存在其他问题。例如,可能无法通过PATH环境变量给出的搜索路径访问java
。或者Command.jar
可能不在当前目录中。
您需要查看java
命令写入标准输出和/或标准错误流的内容(如果有的话)。
答案 2 :(得分:0)
您是否尝试过使用ProcessBuilder(java.lang.ProcessBuilder)?语法如下 -
ProcessBuilder pb = new ProcessBuilder("java", "-jar", "absolute path upto jar");
Process p = pb.start();
您可以按如下方式将输入/输出/错误重定向到/来自文件
File commands = new File("absolute path to inputs file");
File dirOut = new File("absolute path to outputs file");
File dirErr = new File("absolute path to error file");
dirProcess.redirectInput(commands);
dirProcess.redirectOutput(dirOut);
dirProcess.redirectError(dirErr);
我尝试过它并且有效!请告诉我们您遇到的任何错误或例外情况。