gpt4 book ai didi

java - 将进程输入流数据写入 GUI

转载 作者:行者123 更新时间:2023-12-02 03:34:39 25 4
gpt4 key购买 nike

我在我的 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/

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