如何从 Java 中的另一个线程更新 SWT GUI
2022-09-04 01:29:28
我正在使用 SWT 编写桌面应用程序。从另一个线程更新 GUI 控件的最简单方法是什么?
我正在使用 SWT 编写桌面应用程序。从另一个线程更新 GUI 控件的最简单方法是什么?
使用 Display.asyncExec 或 Display.syncExec,具体取决于您的需要。
例如,另一个线程可能会调用此方法来安全地更新标签:
private static void doUpdate(final Display display, final Label target,
final String value) {
display.asyncExec(new Runnable() {
@Override
public void run() {
if (!target.isDisposed()) {
target.setText(value);
target.getParent().layout();
}
}
});
}
这里有一个教程。
“当涉及到线程问题时,SWT确实强调了快速故障;因此,至少在生产之前,典型的问题不会被忽视。但是,问题是,如果您需要从后台线程更新 SWT 中的标签/按钮/超级傻瓜控件,该怎么办?嗯,它与Swing惊人地相似:”
// Code in background thread.
doSomeExpensiveProcessing();
Display.getDefault().asyncExec(new Runnable() {
public void run() {
someSwtLabel.setText("Complete!");
}
});