views:

539

answers:

4

Hi, I am writing a desktop application using SWT. What is the simplest way to update GUI controls from another thread?

+2  A: 

There's a tutorial here.

"SWT does make a point to fail-fast when it comes to threading problems; so at least the typical problems don't go unnoticed until production. The question is, however, what do you do if you need to update a label/button/super-duper-control in SWT from a background thread? Well, it's surprisingly similar to Swing:"

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

You can actually just sent a message to the GUI thread that some modification has been changed. This is cleaner if you see it from MVC perspective.

nanda
+3  A: 

Use Display.asyncExec or Display.syncExec, depending on your needs.

For example, another thread might call this method to safely update a label:

  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();
        }
      }
    });
  }
McDowell
A: 

When creating the separate thread from the main thread pass the Gui object to the new thread and u can access all the properties of that GUI object.

Ravi Chandra