【问题标题】:SWT ProgressMonitorDialog vs JobSWT ProgressMonitorDialog 与 Job
【发布时间】: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


【解决方案1】:

不知道 ProgressDialog 怎么样,但是在使用作业时显示进度,你必须设置

IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
setShowProgressIndicator(true);

org.eclipse.ui.application.WorkbenchWindowAdvisor.preWindowOpen()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 2013-02-18
    • 2010-10-07
    • 1970-01-01
    相关资源
    最近更新 更多