将进程输入流数据写入 GUI
Writing process input stream data to GUI
我在我的 java GUI 代码中使用 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 而不会卡住它?
感谢您的帮助。
如果您在用户界面线程中 运行 长 运行ning 代码,它将阻塞 UI。所以你必须在后台运行这段代码。您可以使用 Thread
(或 CompletableFuture
之类的东西)。如果这是一个 Eclipse 插件,您还可以使用 Job
或进度监视器)。
在您的后台线程中,您调用 Display.asyncExec
到 运行 更新 UI 的代码(所以这里只调用 printToTerminal
)。
当代码已经在 UI 线程中 运行 时调用 Display.asyncExec
不起作用。
我在我的 java GUI 代码中使用 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 而不会卡住它?
感谢您的帮助。
如果您在用户界面线程中 运行 长 运行ning 代码,它将阻塞 UI。所以你必须在后台运行这段代码。您可以使用 Thread
(或 CompletableFuture
之类的东西)。如果这是一个 Eclipse 插件,您还可以使用 Job
或进度监视器)。
在您的后台线程中,您调用 Display.asyncExec
到 运行 更新 UI 的代码(所以这里只调用 printToTerminal
)。
当代码已经在 UI 线程中 运行 时调用 Display.asyncExec
不起作用。