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

Mic*_*ber 13 java user-interface swt multithreading

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

McD*_*ell 17

根据您的需要使用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();
        }
      }
    });
  }
Run Code Online (Sandbox Code Playgroud)


Ada*_*ski 5

有一个教程在这里.

"当涉及到线程问题时,SWT确实指出了快速失败的原因;所以至少在生产之前不会忽视典型的问题.但问题是,如果你需要更新标签/按钮,你会怎么做SWT中的超级duper-control来自后台线程?嗯,它与Swing的惊人相似:"

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