为什么我的PrintWriter无法在ProcessBuilder中工作

时间:2016-08-25 06:08:34

标签: java process inputstream outputstream

我试图从java端接管另一个应用程序。

接管这里意味着获取另一个应用程序的输出并输入命令。

我使用的代码:

public class ProcessTest implements Runnable{

    BufferedReader reader;
    PrintWriter writer;
    Thread readThread;
    boolean terminate = false;

    public ProcessTest(){
        try{
            initialize();
        }catch(Exception e){
        }
    }

    public void initialize() throws Exception{
        ProcessBuilder builder = new ProcessBuilder("another_application.exe");
        builder.redirectErrorStream(true);
        Process process = builder.start();

        InputStream is = process.getInputStream();
        OutputStream os = process.getOutputStream();

        InputStreamReader isr = new InputStreamReader(is);
        OutputStreamWriter osw = new OutputStreamWriter(os);


        reader = new BufferedReader(isr);
        writer = new PrintWriter(osw);  
        readThread = new Thread(this);
        readThread.start();
    }

    @Override
    public void run() {
        // TODO Auto-generated method stub
        while(terminate == false){
            int c;
            try {
                c = reader.read();
                if(c == -1){
                    return; 
                }
                System.out.println(c);

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

    public void input(String str){
        writer.write(str);
        writer.println();
        writer.flush();
    }

    public static void main(String args[]){
        ProcessTest obj = new ProcessTest();
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){
            String str = scan.nextLine();
            obj.input(str);
        }
        scan.close();
    }
}

开始时,我可以使用writer向应用程序输入命令,并使用reader来获取其输出。

在输入特定命令之前,readerwriter都正常工作。

输入命令后(命令的效果:1,将应用程序的状态从配置更改为运行; 2,输出很多)。 reader继续有效,但不是writer。应用程序无法显示作者输入的任何响应。

我在我的智慧'最后,请告诉我可能的原因为什么会出现这样的问题。我试图接管的申请是公司内部申请,所以我还没有给你起名。

0 个答案:

没有答案