gpt4 book ai didi

java - 与另一个进程 Java 交互

转载 作者:行者123 更新时间:2023-11-30 09:43:32 24 4
gpt4 key购买 nike

我正在尝试与 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();

关于java - 与另一个进程 Java 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8284200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com