【问题标题】:ProcessBuilder gets stuck after getting an errorProcessBuilder 在收到错误后卡住
【发布时间】:2010-09-27 21:01:12
【问题描述】:

我正在尝试远程执行一个 .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());

但是我的程序卡在了 while 循环中。 它显示的错误是:

CMD.EXE was started with the above path as the current directory.
UNC paths are not supported.  Defaulting to Windows directory.

它永远不会退出while循环。但它会成功执行脚本。 任何形式的帮助表示赞赏。谢谢

【问题讨论】:

    标签: java processbuilder


    【解决方案1】:

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

    阅读this 并确保您遵循所有的建议。

    编辑:查看您编写的代码,您似乎已经从这篇精确的文章中复制了代码。实际上,它看起来像清单 4.3 (MediocreExecJavac.java)。

    【讨论】:

    • 或者,调用processBuilder.redirectErrorStream(true); 将进程的标准错误重定向到其标准输出。那么你只需要从process.getInputStream()阅读。
    【解决方案2】:

    在 .start() 之前添加 redirectErrorStream(true) 并读取 getInputStream()。这将读取 stderr 并将其与 stdout 合并为一个可以使用 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());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-25
      • 1970-01-01
      • 2011-12-21
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      • 1970-01-01
      相关资源
      最近更新 更多