I am writing a desktop application using SWT. What is the simplest way to update GUI controls from another thread?
4 Answers
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();
}
}
});
}

- 107,573
- 31
- 204
- 267
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!");
}
});

- 54,009
- 15
- 113
- 152
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.

- 24,458
- 13
- 71
- 90
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.
-
Just because the GUI thread has a reference to the GUI object, doesn't mean that it has access to it. You can only update GUI objects from the original thread. – Rich S Aug 24 '12 at 15:08