如何从 Java 中的另一个线程更新 SWT GUI

2022-09-04 01:29:28

我正在使用 SWT 编写桌面应用程序。从另一个线程更新 GUI 控件的最简单方法是什么?


答案 1

使用 Display.asyncExecDisplay.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();
        }
      }
    });
  }

答案 2

这里有一个教程。

“当涉及到线程问题时,SWT确实强调了快速故障;因此,至少在生产之前,典型的问题不会被忽视。但是,问题是,如果您需要从后台线程更新 SWT 中的标签/按钮/超级傻瓜控件,该怎么办?嗯,它与Swing惊人地相似:”

// Code in background thread.
doSomeExpensiveProcessing();
Display.getDefault().asyncExec(new Runnable() {
 public void run() {
  someSwtLabel.setText("Complete!");
 }
});

推荐