public void run( final INonInterruptibleRunnableWithProgress runnable, final IProgressMonitor monitor) throws InvocationTargetException { Runnable actualRunnable = new Runnable() { @Override public void run() { try { runnable.run(monitor); } catch (InvocationTargetException e) { model.crashed(e); } catch (RuntimeException e) { model.crashed(e); } catch (Error e) { model.crashed(e); } catch (Throwable e) { model.crashed(new InvocationTargetException(e)); } finally { synchronized (model) { model.finished(); model.notifyAll(); } progressComponent.dispose(); } } }; defaultExecuter.execute(actualRunnable); try { if (millisecondsUntilDialogPopup > 0) { synchronized (model) { if (!model.isFinished()) { model.wait(millisecondsUntilDialogPopup); } } } if (!model.isFinished()) { progressComponent.show(); } model.throwThrowableIfAny(); } catch (InterruptedException e) { throw new RuntimeException( "InterruptedException during non interruptable progress", e); // $NON-NLS-1$ } }
public void run( final IInterruptibleRunnableWithProgress runnable, final IProgressMonitor progressMonitor, final IObservableCancelable cancelable) throws InterruptedException, InvocationTargetException { Runnable actualRunnable = new Runnable() { @Override public void run() { try { runnable.run(progressMonitor, cancelable); } catch (InterruptedException e) { model.interrupted(e); } catch (InvocationTargetException e) { model.crashed(e); } catch (RuntimeException e) { model.crashed(e); } catch (Error e) { model.crashed(e); } catch (Throwable e) { model.crashed(new InvocationTargetException(e)); } finally { synchronized (model) { model.finished(); model.notifyAll(); } progressComponent.dispose(); } } }; defaultExecuter.execute(actualRunnable); synchronized (model) { if (!model.isFinished()) { model.wait(millisecondsUntilDialogPopup); } } if (!model.isFinished()) { progressComponent.show(); } model.throwThrowableIfAny(); }