gpt4 book ai didi

java - ProcessBuilder 或 Runtime.getRuntime().exec 将无法完成 jar 执行

转载 作者:太空宇宙 更新时间:2023-11-04 13:45:26 25 4
gpt4 key购买 nike

我有一个 jar,它使用 Java 中的 XSLT 将一种 XML 转换为另一种 XML 格式。 jar 将输出复制到某个文件夹。当我在命令提示符下运行它时,它工作得绝对正常,但通过 Runtime.getRuntime().exec 或 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 并调用 main 函数来转换 XML 时,它没有正确转换 XML。这意味着,常量的出现非常好,但是在导入期间不会调用被调用到类文件中以获取数据的函数。

是的!在命令行运行jar就成功了!它工作完美。但导入后无法正确转换。为什么会有这样的行为?这非常奇怪。请帮忙。

最佳答案

你必须消耗你的进程的StdOut(也许还有StdErr)......否则当缓冲区填满时,进程将挂起!

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

除此之外,它还使用 org.apache.commons.exec.ExecuteStreamHandler. 捕获子进程输出。

关于java - ProcessBuilder 或 Runtime.getRuntime().exec 将无法完成 jar 执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30897711/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com