代码之家  ›  专栏  ›  技术社区  ›  Michał Ziober

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

  •  12
  • Michał Ziober  · 技术社区  · 16 年前

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

    4 回复  |  直到 12 年前
        1
  •  15
  •   McDowell rahul gupta    16 年前

    使用 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();
            }
          }
        });
      }
    
        2
  •  5
  •   Adamski    16 年前

    有一个教程 here .

    “在线程问题上,SWT确实会很快失败;因此,至少在生产之前,典型问题不会被忽视。但是,问题是,如果需要从后台线程更新SWT中的label/button/super duper控件,该怎么办?好吧,这和秋千惊人地相似。”

    // Code in background thread.
    doSomeExpensiveProcessing();
    Display.getDefault().asyncExec(new Runnable() {
     public void run() {
      someSwtLabel.setText("Complete!");
     }
    });
    
        3
  •  0
  •   nanda    16 年前

    实际上,您可以向GUI线程发送一条消息,说明某些修改已经更改。如果从MVC的角度来看,这会更清晰。

        4
  •  -1
  •   Ravi Chandra    16 年前

    当从主线程创建单独的线程时,将GUI对象传递给新线程,U可以访问该GUI对象的所有属性。