我有一个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并调用main函数来转换XML时,它没有正确转换XML。 意思是,常量非常好,但是在导入过程中没有调用被调用到类文件中来获取数据的函数。
YES!在命令行上运行jar是成功的!它完美无瑕。但是在导入时它没有正确转换。为何如此行为?它非常奇怪。请帮忙。
答案 0 :(得分:0)
你必须消耗你的过程的StdOut(也许是StdErr)......否则 填充缓冲区时进程将挂起!
如果您不想自己编写代码,可以查看Apache CommonsExec ...它有助于执行和处理外部进程https://commons.apache.org/proper/commons-exec/tutorial.html
除其他外,它使用org.apache.commons.exec.ExecuteStreamHandler.