Java EclipseRCP进度监视器

Java EclipseRCP进度监视器,java,progress-bar,eclipse-rcp,jobs,Java,Progress Bar,Eclipse Rcp,Jobs,我使用作业类创建一些任务,并使用进度监视器在进度视图中显示进度 Job createNewJobRun(final int i, final Job previousJob) { Job job = new Job("Test Job " + i) { @Override protected IStatus run(IProgressMonitor monitor) { monitor.beginTask("Job is r

我使用作业类创建一些任务,并使用进度监视器在进度视图中显示进度

    Job createNewJobRun(final int i, final Job previousJob) {
    Job job = new Job("Test Job " + i) {
        @Override
        protected IStatus run(IProgressMonitor monitor) {
            monitor.beginTask("Job is running", 100); //$NON-NLS-1$

            if (previousJob != null) {
                try {
                    previousJob.join();

                } catch (InterruptedException e1) {
                    e1.printStackTrace();
                }
            }
                            // do the real work 
            monitor.done();
            return Status.OK_STATUS;
        }
    };

    job.schedule();
    return job;

}
我不想在paraller中运行作业,但按顺序,如何在progress视图中初始化作业,以显示将在上一个完成后执行。
上面的代码只是等待前一个,所以它在第二个作业之后阻塞,并且没有显示进度条

您需要查看Eclipse作业的调度规则

这应该会有所帮助。

您需要查看Eclipse作业的调度规则

这应该会有所帮助。

调度规则应如下所示:

   public class MutexRule implements ISchedulingRule {
      public boolean isConflicting(ISchedulingRule rule) {
         return rule == this;
      }
      public boolean contains(ISchedulingRule rule) {
         return rule == this;
      }
   }
设置规则和日程安排:

   Job job1 = new SampleJob();
   Job job2 = new SampleJob();
   MutexRule rule = new MutexRule();
   job1.setRule(rule);
   job2.setRule(rule);
   job1.schedule();
   job2.schedule()

来源:

调度规则应该如下所示:

   public class MutexRule implements ISchedulingRule {
      public boolean isConflicting(ISchedulingRule rule) {
         return rule == this;
      }
      public boolean contains(ISchedulingRule rule) {
         return rule == this;
      }
   }
设置规则和日程安排:

   Job job1 = new SampleJob();
   Job job2 = new SampleJob();
   MutexRule rule = new MutexRule();
   job1.setRule(rule);
   job2.setRule(rule);
   job1.schedule();
   job2.schedule()

来源:

一种可能的解决方案是使用@TomSeidel和@SambiReddy提出的调度规则,但这种解决方案有许多限制

特别是,由于通常使用的调度规则没有顺序的概念,所以它只适用于在所有以前的作业完成之前不调度多个新作业的情况。这是可以修复的,尽管结果通常很难维持

你不会写任何关于有问题的作业的东西,但是如果我们谈论的是一遍又一遍地重复同一个作业,那么简单的解决方案就是在作业完成之前重新安排作业

Job job = new Job("Test Job " + i) {
    @Override
    protected IStatus run(IProgressMonitor monitor) {
        monitor.beginTask("Job is running", 100); //$NON-NLS-1$

                        // do the real work 
        monitor.done();

        schedule(...);
        return Status.OK_STATUS;
    }
};

job.schedule();

一种可能的解决方案是使用@TomSeidel和@SambiReddy提出的调度规则,但这种解决方案有许多限制

特别是,由于通常使用的调度规则没有顺序的概念,所以它只适用于在所有以前的作业完成之前不调度多个新作业的情况。这是可以修复的,尽管结果通常很难维持

你不会写任何关于有问题的作业的东西,但是如果我们谈论的是一遍又一遍地重复同一个作业,那么简单的解决方案就是在作业完成之前重新安排作业

Job job = new Job("Test Job " + i) {
    @Override
    protected IStatus run(IProgressMonitor monitor) {
        monitor.beginTask("Job is running", 100); //$NON-NLS-1$

                        // do the real work 
        monitor.done();

        schedule(...);
        return Status.OK_STATUS;
    }
};

job.schedule();