RCP中实现带有run in background按钮的进度条对话框


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(进度片段值);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值