Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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在收到错误后被卡住_Java_Processbuilder - Fatal编程技术网

Java ProcessBuilder在收到错误后被卡住

Java ProcessBuilder在收到错误后被卡住,java,processbuilder,Java,Processbuilder,我正在尝试远程执行.bat文件并实现以下代码行: ProcessBuilder processBuilder = new ProcessBuilder(command); final Process process = processBuilder.start(); InputStream stderr = process.getErrorStream(); InputStreamReader isr = new InputStreamReader(stderr);

我正在尝试远程执行.bat文件并实现以下代码行:

ProcessBuilder processBuilder = new ProcessBuilder(command);
    final Process process = processBuilder.start();

    InputStream stderr = process.getErrorStream();
    InputStreamReader isr = new InputStreamReader(stderr);
    BufferedReader br = new BufferedReader(isr);
    String line = null;


    while ((line = br.readLine()) != null) {
        System.out.println(line);

    }
    process.waitFor();
    System.out.println("Waiting ...");

    System.out.println("Returned Value :" + process.exitValue());
但我的程序在循环时被卡住了。 它显示的错误是:

CMD.EXE was started with the above path as the current directory.
UNC paths are not supported.  Defaulting to Windows directory.
它从不退出while循环,但它成功地执行了脚本。
感谢您的任何帮助。谢谢

您需要确保您也在处理stderr,并且您应该在单独的线程中处理这两个流

阅读并确保遵守所有建议

编辑:看看你写的代码,你似乎复制了这篇文章中的代码。事实上,它类似于清单4.3(MediocreExecJavac.java)。

在.start()和读取getInputStream()之前添加redirectErrorStream(true)。这将读取stderr并将其与stdout合并到一个响应中,该响应可以用getInputStream()读取


或者,调用
processBuilder.redirectErrorStream(true)
将进程的标准错误重定向到其标准输出。然后,您只需要读取
process.getInputStream()
    ProcessBuilder processBuilder = new ProcessBuilder(command);
    processBuilder.redirectErrorStream(true);
    final Process process = processBuilder.start();

    InputStream stderr = process.getInputStream();
    InputStreamReader isr = new InputStreamReader(stderr);
    BufferedReader br = new BufferedReader(isr);
    String line = null;


    while ((line = br.readLine()) != null) {
        System.out.println(line);

    }
    process.waitFor();
    System.out.println("Waiting ...");

    System.out.println("Returned Value :" + process.exitValue());