Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ProcessBuilder或Runtime.getRuntime().exec赢得';无法完成jar执行_Java_Xml_Xslt_Cmd_Processbuilder - Fatal编程技术网

Java ProcessBuilder或Runtime.getRuntime().exec赢得';无法完成jar执行

Java ProcessBuilder或Runtime.getRuntime().exec赢得';无法完成jar执行,java,xml,xslt,cmd,processbuilder,Java,Xml,Xslt,Cmd,Processbuilder,我有一个jar,它使用Java中的XSLT将一种XML转换为另一种XML格式。jar将输出复制到某个文件夹。当我在命令提示符下运行它时,它工作得非常好,但通过Runtime.getRuntime().exec或ProcessBuilder运行它并不能完成该过程。只转换了25个文件,它就冻结了。当我关闭进程时,我可以看到所有文件都加载到输出文件夹中,而不是加载到同一文件夹中 有什么建议吗 我的代码 private boolean runLoaderScript() throws IOExcept

我有一个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是成功的!它工作完美无瑕。但当导入时,它不能正确转换。为什么会有这样的行为?这很奇怪。请帮助。

您必须使用流程的标准输出(可能还有标准输出)。。。否则 当缓冲区填满时,进程将挂起

如果你不想自己编写代码,你可以看看ApacheCommonsExec。。。它有助于执行和处理外部流程


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

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

如果你不想自己编写代码,你可以看看ApacheCommonsExec。。。它有助于执行和处理外部流程


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

当您可以将JAR文件导入classpath并执行
{CLASS}.main({ARGS})时,为什么要在Java中使用exec(您可以使用反射动态导入类)?是的,它确实有效。但为什么上述方法不起作用呢@nulldev我已经更新了这个问题。当您可以将JAR文件导入classpath并执行
{CLASS}.main({ARGS})时,为什么要在Java中使用exec(您可以使用反射动态导入类)?是的,它确实有效。但为什么上述方法不起作用呢@nulldev我已经更新了这个问题。当您可以将JAR文件导入classpath并执行
{CLASS}.main({ARGS})时,为什么要在Java中使用exec(您可以使用反射动态导入类)?是的,它确实有效。但为什么上述方法不起作用呢@nulldev我已经更新了问题。它正在工作。。您能告诉我如何填充缓冲区吗?它与java本身无关。操作系统(在这方面Linux、Win等之间没有区别)在父进程和子进程之间创建一个大小仅为几KB的缓冲区。如果您的子进程通过写入控制台来填充此缓冲区,并且父进程没有使用缓冲区中的数据,那么最终缓冲区将被填充,并且子进程对其的下一次写入将阻塞并“挂起”子进程。它正在工作。。您能告诉我如何填充缓冲区吗?它与java本身无关。操作系统(在这方面Linux、Win等之间没有区别)在父进程和子进程之间创建一个大小仅为几KB的缓冲区。如果您的子进程通过写入控制台来填充此缓冲区,并且父进程没有使用缓冲区中的数据,那么最终缓冲区将被填充,并且子进程对其的下一次写入将阻塞并“挂起”子进程。它正在工作。。您能告诉我如何填充缓冲区吗?它与java本身无关。操作系统(在这方面Linux、Win等之间没有区别)在父进程和子进程之间创建一个大小仅为几KB的缓冲区。如果您的子进程通过写入控制台来填充此缓冲区,并且父进程没有使用缓冲区中的数据,那么最终缓冲区将被填充,并且子进程对其的下一次写入将阻塞并“挂起”子进程。