【问题标题】:RCP: No progress dialog when starting a JobRCP:启动作业时没有进度对话框
【发布时间】:2015-04-22 09:22:37
【问题描述】:

当我开始工作时,我默认得到NullProgressMonitor,而不是进度对话框。如何改变这种行为?

问题

根据“提供有关工作的反馈”下的 article,您唯一需要设置的是 job.setUser(true); 以获取进度对话框。 但这对我不起作用。

为了重现该问题,我创建了一个带有示例内容的新 Eclipse4 项目并修改了创建的 AboutHandler:

import org.eclipse.core.runtime.*;
import org.eclipse.core.runtime.jobs.*;
import org.eclipse.e4.core.di.annotations.*;
import org.eclipse.swt.widgets.*;

public class AboutHandler
{
  @Execute
  public void execute(Shell shell)
  {
    Job j = new YourThread(10);
    j.setUser(true);
    j.schedule();
  }

  private static class YourThread extends Job
  {
    private int workload;

    public YourThread(int workload)
    {
      super("Test");
      this.workload = workload;
    }

    @Override
    public IStatus run(IProgressMonitor monitor)
   {
      // Tell the user what you are doing
      monitor.beginTask("Copying files", workload);

      // Do your work
      for (int i = 0; i < workload; i++)
      {
        // Optionally add subtasks
        monitor.subTask("Copying file " + (i + 1) + " of " + workload + "...");
        System.out.println("Copying file " + (i + 1) + " of " + workload + "...");

       try
        {
          Thread.sleep(2000);
        }
        catch (InterruptedException e)
        {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }

        // Tell the monitor that you successfully finished one item of
        // "workload"-many
        monitor.worked(1);

        // Check if the user pressed "cancel"
        if (monitor.isCanceled())
        {
         monitor.done();
          return Status.CANCEL_STATUS;
        }
      }

      // You are done
      monitor.done();
      return Status.OK_STATUS;
    }
  }
}

当我按下 About-menuitem 时,我唯一看到的是 println(),在调试器中我看到 monitorNullProgressMonitor

这是默认行为吗?我该如何改变它?

解决方案

我按照 greg-449 的建议写了自己的 IProgressMonitor。我发现 jFace ProgressMonitorDialog 包含一个 IProgressMonitor,对我来说是一个很好的参考。

【问题讨论】:

  • 你怎么知道你收到了NullProgressMonitor
  • 我启动了一个调试会话并在 Job.run() 中设置了一个断点。然后当我将鼠标悬停在monitor 上时,它被列为NullProgressMonitor

标签: java eclipse-plugin eclipse-rcp jobs e4


【解决方案1】:

对于 e4 应用程序,您有责任为 Job 系统提供进度提供程序,使用:

Job.getJobManager().setProgressProvider(provider);

其中 'provider' 是一个扩展 ProgressProvider 的类。提供者返回作业使用的进度监视器。

This article 有一些关于进度提供者的信息。

【讨论】:

  • 是否有默认的 ProgressProvider?我只找到了 ProgressManager,但它在一个内部包中,所以我可能不应该使用那个。
  • 不,没有默认值。您不能在 'org.eclipse.ui.internal.progress' 中使用 ProgressManager,因为 'org.eclipse.ui' 代码在 e4 中不起作用。
  • 我没有意识到这一点。可惜没有默认值。
  • 是的,当我第一次遇到这个问题时,我花了一些时间才弄清楚发生了什么。
  • 很高兴我不是唯一一个。
猜你喜欢
  • 2011-06-12
  • 1970-01-01
  • 2020-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
相关资源
最近更新 更多