Em suma, cole essa meleca na tua classe que herde de AbstractSplashHandler e sempre que precisar atualizar a GUI assincronamente, use esse método
@SuppressWarnings("restriction")
private void updateUI(final Runnable r) {
Shell splashShell = getSplash();
if (splashShell == null || splashShell.isDisposed())
return;
Display display = splashShell.getDisplay();
if (Thread.currentThread() == display.getThread())
r.run();
else {
StartupRunnable startupRunnable = new StartupRunnable() {
public void runWithException() throws Throwable {
r.run();
}
};
display.asyncExec(startupRunnable);
}
}
Exemplo de chamada (estou atualizando uma ProgressBar fake ) :
private void fakeUpdate(final String message, final boolean increment) {
updateUI(new Runnable() {
public void run() {
if (getSplash().isDisposed())
return;
if (increment) {
progress.setSelection( progress.getSelection() + 1 );
}
if (message != null) {
notes.setText(message);
notes.update();
}
}
});
}
É meio sinistro (gera uns warnings logo no import), mas furunfa...