public class TestWithProgress implements IRunnableWithProgress {
public void run(IProgressMonitor monitor)
throws InvocationTargetException, InterruptedException {
monitor.beginTask("Test", IProgressMonitor.UNKNOWN);
ActivateJob job = new ActivateJob("Test");
job.addJobChangeListener(new ActivateJobChangeAdapter(Display.getDefault()));
job.setUser(true);
job.schedule();
if (monitor.isCanceled()) {
throw new InterruptedException(
"The long running operation was cancelled"); //$NON-NLS-1$
}
}
private class ActivateJob extends Job {
public ActivateJob(String name) {
super(name);
}
@Override
protected IStatus run(IProgressMonitor monitor) {
try {
...................
return new Status(Status.OK, "OK", "OK");
} catch (Exception ex) {
return new Status(Status.ERROR, "FAIL", "FAIL");
}
}
}
private class ActivateJobChangeAdapter extends JobChangeAdapter {
/*
* (non-Javadoc)
*
* @see
* org.eclipse.core.runtime.jobs.JobChangeAdapter#done(org.eclipse.core
* .runtime.jobs.IJobChangeEvent)
*/
@Override
public void done(final IJobChangeEvent event) {
IStatus iStatus = event.getResult();
String message = iStatus.getMessage();
if (IStatus.OK != iStatus.getSeverity()) {
......
}
}
}
}
ProgressMonitorDialog progressMonitorDialog = new ProgressMonitorDialog(
Display.getCurrent().getActiveShell());
try {
progressMonitorDialog.run(false, true,
new TestWithProgress());
} catch (InvocationTargetException e) {
} catch (InterruptedException e) {
} catch (Throwable e) {
}
WorkbenchWindowAdvisor.preWindowOpen()中有这configurer.setShowProgressIndicator(true);确保在状态栏显示进度条
如果要显式进度窗口,用job.setUser(true).或者调用IWorkbenchSiteProgressService.showInDialog(...)
完成部分任务时执行,monitor.worked(进度片段值);