【问题标题】:BufferedReader readLine() waiting for ever reading from Process inputStreamBufferedReader readLine() 等待从 Process inputStream 读取
【发布时间】:2016-02-24 15:24:02
【问题描述】:

我正在使用通用代码从进程中读取标准输出:

        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 正在等待 /n 停止读取,并且新的 gradle 输出可能存在一些问题,但我不确定这是否是问题。

如何解决这个问题?

【问题讨论】:

  • “当 gradle 失败时” 它告诉你在标准输出流中,而不是错误流?
  • 它被锁定在此,我试图在此代码之后读取 errorStream,但从未到达该代码

标签: java bufferedreader readline runtime.exec inputstreamreader


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2021-09-30
    • 2014-09-26
    • 2014-03-25
    • 2012-06-16
    • 2012-09-30
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多