java - RCP : No progress dialog when starting a Job

标签 java eclipse-plugin eclipse-rcp jobs e4

当我开始一个工作时,我默认得到 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(),在调试器中我看到 monitor 是一个 NullProgressMonitor

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

解决方案

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

最佳答案

对于 e4 应用程序,您有责任使用以下方法为作业系统提供进度提供程序:

Job.getJobManager().setProgressProvider(provider);

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

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

关于java - RCP : No progress dialog when starting a Job,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29793071/

相关文章:

java - 是否可以在现有 Eclipse RCP View 中添加新的小部件

web-services - BPEL 输出字符串

java - 在 Eclipse 中安装 PMD 5.0.4

eclipse - Eclipse RCP 应用程序中的 "global"数据存储在哪里?

java - jdbcTemplate.queryForObject 在正常查询运行时返回 EmptyResultDataAccessException

java - 使用查询时,Hibernate 生成的列别名会破坏 AliasToBeanResultTransformer

java - 获取LinkedHashMap的一个子集并保留顺序

java - 自动获取 SFTP 文件

java - 新建Eclipse插件项目什么时候选择 "Generate an activator..."

java - 如何使用RCP在eclipse插件开发中获取被点击的对象