Java p.getInputStream()是否仍然是";“活”吗;?

Java p.getInputStream()是否仍然是";“活”吗;?,java,process,Java,Process,好的,我要做的是为另一个应用程序制作一个JavaGUI包装器。我遇到的问题是,我在使输出“活动”时遇到问题。此时,应用程序在正在运行的进程结束时吐出所有应用程序输出。由于正在运行的应用程序是游戏Minecraft的地图渲染器工具,所以输出基本上是当前作业的进度指示器,所以它需要是实时的。我目前使用的代码是: package net.rymate.overviewer; import java.io.BufferedReader; import java.io.InputStream; impo

好的,我要做的是为另一个应用程序制作一个JavaGUI包装器。我遇到的问题是,我在使输出“活动”时遇到问题。此时,应用程序在正在运行的进程结束时吐出所有应用程序输出。由于正在运行的应用程序是游戏Minecraft的地图渲染器工具,所以输出基本上是当前作业的进度指示器,所以它需要是实时的。我目前使用的代码是:

package net.rymate.overviewer;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;

/**
*
* @author ryan
*/
public class Testmain {

    public Testmain(String commandline) {
        try {
            String line;
            Process p = new ProcessBuilder(commandline, "C:/exmaple/ C:/output").start();
            BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
            BufferedReader err = new BufferedReader(new InputStreamReader(p.getErrorStream()));
            while ((line = input.readLine()) != null) {
                System.out.println(line);
            }
            while ((line = err.readLine()) != null) {
                System.out.println(line);
            }
            input.close();
        } catch (Exception err) {
            err.printStackTrace();
        }
    }

    public static void main(String[] args) {
        //new Testmain("C:/Documents and Settings/ryan/My Documents/overviewer-0.4.22-win32/overviewer.exe -v");
        new Testmain("C:/Documents and Settings/ryan/My Documents/overviewer-0.4.22-win32/overviewer.exe");
    }
}
任何帮助都将不胜感激。:)


编辑:如果不是通过cmd运行,应用程序似乎只能输出除错误以外的任何内容。那么有没有办法通过cmd通过该实现来运行它呢?

减少BufferedReader大小是一个简单但不正确的修复方法,如果错误流(您第二次读取)在您开始读取之前产生了大量输出,那么该修复方法将挂起。正确的方法是为每个流创建一个线程,在数据可用时立即读取数据。如何处理stdout和stderr的同时输出取决于您