button.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent evt) { ProgressMonitorDialog pmd = new ProgressMonitorDialog(getShell()); try { pmd.run(false, false, new IRunnableWithProgress() { @Override public void run(IProgressMonitor monitor) { final Object[] ca = getElements getShell().getDisplay().syncExec(new Runnable() { @Override public void run() { setElements(ca); } }); } }); } catch (InvocationTargetException e) { Plugin.log(e); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } } });