Java使用inputstream从外部程序读取标准输出

4 java io

我正在尝试开发一个读取外部程序标准输出的类(使用Process,Runtime.getRuntime().exec(cmdLine,env,dir)的实例).程序在过程中接受用户输入,并且在给出有效输入之前不会继续; 这似乎导致我尝试读取其输出的方式出现问题:

    egm.execute(); // run external the program with specified arguments
    BufferedInputStream stdout = new BufferedInputStream(egm.getInputStream());
    BufferedInputStream stderr = new BufferedInputStream(egm.getErrorStream());
    BufferedOutputStream stdin = new BufferedOutputStream(egm.getOutputStream());



    int c; //standard output input stream
    int e; //standadr error input stream

    while((c=stdout.read()) != -1) //<-- the Java class stops here, waiting for input? 
    {
        egm.processStdOutStream((char)c); 
    }
    while((e=stderr.read()) != -1)
    {
        egm.processStdErrStream((char)e);
    }
    //...
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题,以便程序接收有效的输入并继续?解决这个问题的任何帮助都会很棒!

Bri*_*new 7

必须同时使用程序的stdout和stderr以避免阻塞方案.

有关更多信息,请参阅此文章,特别注意StreamGobbler在单独的线程中捕获stdout/err 的机制.这对于防止阻塞至关重要,如果您没有正确执行,则会导致大量错误!