我在我的 GUI 的 Java 代码中使用 SWT,并执行一个用 python 编写的代码的进程。 我使用进程输入流来捕获进程上的打印并将它们立即写入我的 GUI。
我的代码:
in = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
printToTerminal(line);
}
和 printToTerminal 函数:
protected void printToTerminal(String text) {
terminal.append(text + "\n");
terminal.redraw();
terminal.update();
}
终端是一个文本对象,我想附加文本,然后使用重绘和更新以便立即向用户显示该行。 我的问题是我的 GUI 被卡住了,因为 while 循环完成了工作并获取了线路,但我似乎无法找到在不卡住我的 GUI 的情况下获取线路的解决方案。 我尝试使用 display.async 函数并在其中包含 while 循环,但它仍然不起作用,我的 GUI 卡住了。
有没有办法获取我的进程的输入流并将其打印到我的 GUI 而不会卡住?
感谢您的帮助。
最佳答案
如果您在用户界面线程中运行长时间运行的代码,它将阻塞 UI。所以你必须在后台运行这段代码。您可以使用Thread
(或类似CompletableFuture
)。如果这是一个 Eclipse 插件,您还可以使用 Job
或进度监视器。
在后台线程中,您调用 Display.asyncExec
来运行更新 UI 的代码(因此此处只需调用 printToTerminal
)。
当代码已在 UI 线程中运行时调用 Display.asyncExec
不起作用。
关于java - 将进程输入流数据写入 GUI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37593835/