与另一个进程Java交互



我正在尝试与Java中的另一个进程进行交互。它是这样的……

Runtime rt;
Process pr=rt.exec("cmd");

然后我使用…向进程发送一些命令。

BufferedReader processOutput = new BufferedReader(new InputStreamReader(pr.getInputStream()));
BufferedWriter processInput = new BufferedWriter(new OutputStreamWriter(pr.getOutputStream()));
processInput.write("gdb");
processInput.flush();

我现在不关心输出。所以我试着用…

while(processOutput.readLine() != null);

但是这个循环永远挂起。我知道这是因为进程还在运行,没有发送空值。我现在不想终止它。我必须根据用户输入发送命令,然后得到输出。

如何做到这一点?换句话说,我想刷新Process输出流,或者在执行一些命令后忽略它,只在我想要的时候读取它。

使用单独的线程读取输出。这样,只要有输出,它就会被读取,但不会阻塞您。

例如,创建这样一个类:

public class ReaderThread extends Thread {
    private BufferedReader reader = null;
    public ReaderThread(BufferedReader reader) {
        this.reader = reader;
    }
    @Override
    public void run() {
        String line = null;
        try {
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
        }
        catch(IOException exception) {
            System.out.println("!!Error: " + exception.getMessage());
        }
    }
}

在你的主类中,而不是while(processOutput.readLine() != null);,调用:

ReaderThread reader = new ReaderThread(processOutput);
reader.start();

最新更新