BufferedReader readLine()等待从Process inputStream读取

时间:2016-02-24 15:24:02

标签: java bufferedreader readline runtime.exec inputstreamreader

我正在使用公共代码从Process读取standardOutput:

        Process p = Runtime.getRuntime().exec("gradlew assembleRelease", null , new File(this.workDir));            
        BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
        String line = null;     
        while ((line = input.readLine()) != null) {
            standardOutput.writeln(line);
        }
        input.close();

直到现在它仍然完美无缺。它使用我的函数standardOutput.writeln(line)将输出存储到txt文件中。最近我更新了我的服务器以使用gradle 2.8进行编译,现在我遇到了一个非常严重的问题。当gradle失败时,input.readLine()函数正在等待。我不明白为什么。它停留在那条线上。我无法找到任何解释。我认为这可能是因为readLine正在等待a / n停止读取,并且新的gradle输出可能存在一些问题,但我不确定这是否是问题。

如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

解决方案最终是在两个独立的线程中读取标准输出和错误输出,该过程阻止自己尝试在读取标准输出时写入错误输出...