@Override public void run(boolean fork, boolean cancelable, final IRunnableWithProgress request) throws InvocationTargetException, InterruptedException { if (headless && Display.getCurrent() == null) { PlatformGIS.run(request); return; } if (getProgressMonitor() instanceof ProgressMonitorPart) { ProgressMonitorPart part = (ProgressMonitorPart) getProgressMonitor(); if (Display.getCurrent() != null) part.setVisible(true); try { setEnablement(buttonBar, false); if (fork) { PlatformGIS.run(request, part); } else { PlatformGIS.runBlockingOperation(request, part); } } finally { setEnablement(buttonBar, true); if (Display.getCurrent() != null && !part.isDisposed()) part.setVisible(false); } } else { if (fork) { PlatformGIS.run(request); } else { PlatformGIS.runBlockingOperation(request, ProgressManager.instance().get()); } } }