【发布时间】:2015-04-21 10:00:09
【问题描述】:
我想使用一个非模态的进度监视器,可以缩小到状态栏的右下角。
据我测试,ProgressMonitorDialog 可以正确地向用户显示进度条,并且可以使用以下代码将其设为模态。但是,没有钩子可以将其缩小到状态栏的右下角。代码如下所示:
try {
ProgressMonitorDialog pmd = new ProgressMonitorDialog(shell){
@Override
protected void setShellStyle(int newShellStyle) {
super.setShellStyle(SWT.CLOSE | SWT.MODELESS|
SWT.BORDER | SWT.TITLE);
setBlockOnOpen(false);
}
};
pmd.run(true, true, new MyOperation());
} catch (final InvocationTargetException e) {
MessageDialog.openError(shell, "Error", e.getMessage());
} catch (final InterruptedException e) {
MessageDialog.openInformation(shell, "Cancelled", e.getMessage());
}
class MyOperation implements IRunnableWithProgress {
@Override
public void run(final IProgressMonitor monitor) throws
InvocationTargetException, InterruptedException {
monitor.beginTask("start task", 10);
// time consuming work here
doExpensiveWork(monitor);
monitor.done();
}
当我使用 Job 进行测试时,作业按预期运行,但我没有得到视觉反馈。 我的代码是这样的:
final ProgressBar progressBar = new ProgressBar(shell, SWT.SMOOTH);
progressBar.setBounds(100, 10, 200, 20);
// Setting the progress monitor
final IJobManager manager = Job.getJobManager();
final IProgressMonitor p = new IProgressMonitor() {
@Override
public void worked(final int work) {
sync.syncExec(new Runnable() {
@Override
public void run() {
progressBar.setSelection(progressBar.getSelection() + work);
}
});
//....
}
Job job = new Job("test") {
@Override
protected IStatus run(IProgressMonitor monitor) {
monitor.beginTask("start task", 10);
// time consuming work here
doExpensiveWork(monitor);
// sync with UI
syncWithUI();
return Status.OK_STATUS;
}
};
job.setUser(true);
job.schedule();
当用户最小化选项卡时,我缺少什么能够获得可以缩小到状态栏右下角的 ProgressMonitorDialog 版本?
【问题讨论】:
-
您的代码是否在 Eclipse Workbench 中运行(即在插件中)?
-
使用
setUser(true),作业应该显示一个进度对话框,但前提是作业运行超过几秒钟。 -
我在 RCP4 应用程序中运行它。 setUser 设置为 true,但我没有看到任何视觉反馈。有什么建议吗?
-
我还应该提到该作业可以运行几分钟,所以我希望届时会看到一个弹出窗口
标签: java eclipse-plugin jface rcp