ProcessBuilder 或 Runtime.getRuntime().exec 不会完成 jar 执行

ProcessBuilder or Runtime.getRuntime().exec won't complete jar execution

我有一个 jar,它使用 Java 中的 XSLT 将一个 XML 格式转换为其他 XML 格式。 jar 将输出复制到某个文件夹。当我在命令提示符下 运行 它工作得很好,但是 运行 它通过 Runtime.getRuntime().exec or ProcessBuilder,它没有完成这个过程。仅转换了 25 个文件,它就冻结了。当我关闭进程时,我可以看到所有文件都被加载到输出文件夹中,而这些文件没有被加载到同一个文件夹中。

有什么建议吗?

我的代码

 private boolean runLoaderScript() throws IOException, InterruptedException {
    String args[] = { "java", "-jar", "C:\Users\gursahibsahni\Desktop\jar\epnlm_new-1.0.0-jar-with-dependencies_WSJ_stringdate.jar", "-c", "-f", "-d", "7", "C:\Users\gursahibsahni\Desktop\ConsynInput\wsjInput\input" };
    ProcessBuilder builder = new ProcessBuilder(args);
    Process qq = (builder).start();
    qq.waitFor();
    return true;
}

private boolean runValidator() throws IOException, InterruptedException {
    Process validatorProcess = Runtime.getRuntime().exec("java -jar C:\Users\gursahibsahni\Desktop\jar\wsj_jar_20140423.jar  -efv -d 7 C:\Users\gursahibsahni\Desktop\ConsynInput\wsjInput\output");
    return (validatorProcess.waitFor()) == 0 ? true : false;
}

此外,当我试图在我的项目中导入 jar 并调用主函数来转换 XML 时,它没有正确转换 XML。 意思是,常量非常好,但是被调用到 class 文件中以获取数据的函数在导入过程中没有被调用。

是的! 运行命令行打jar成功!它完美无瑕。但是当导入时它没有正确转换。为什么会有这样的行为?非常奇怪。请帮忙。

您必须使用进程的 StdOut(可能还有 StdErr)……否则 当缓冲区填满时,进程将挂起!

如果您不想自己编写代码,您可以看看 Apache CommonsExec ...它有助于执行和处理外部进程 https://commons.apache.org/proper/commons-exec/tutorial.html

除其他外,它使用 org.apache.commons.exec.ExecuteStreamHandler.

捕获子进程输出