2012-02-02 72 views
2

我有2种方法都包含selft工作,例如如何设置Eclipse作业执行顺序?

protected void method1(){ 
String name=getName();//return name based on combobox selection 
Job job= new Job("first job"){ 
      @Override 
      protected IStatus run(IProgressMonitor monitor) { 
      someActions(); 
     } 
    } 
} 

protected void method2(){ 
String name=getName();//return name based on combobox selection 
Job job= new Job("second job"){ 
      @Override 
      protected IStatus run(IProgressMonitor monitor) { 
      someActions(); 
     } 
    } 
} 

方法1和method2可以调用seperated.With自己的进度条

我也有一些按钮来调用这两种方法

btnUpdate.addListener(SWT.MouseUp, new Listener() { 

      @Override 
      public void handleEvent(Event event) { 
         method1(); 
         method2(); 
        } 
    } 

但是这种构造工作不正确,因为从method2()开始执行,然后从method1()完成作业。另外,如果我从标记方法一())工作作为加入方法2,然后(将无法启动,直到方法1()执行,但进度条不显示

如何使它正常工作?)

回答

2

预防的通过设置工作规则simultanously运行的2个作业:

public class Mutex implements ISchedulingRule { 

     public boolean contains(ISchedulingRule rule) { 
      return (rule == this); 
     } 

     public boolean isConflicting(ISchedulingRule rule) { 
      return (rule == this); 
     } 

}// Mutex 

public static final ISchedulingRule mutex = new Mutex(); 

为您的工作:

job.setRule(<your mutex instance>); 

确保两个作业使用相同的互斥实例!

这应该:

  1. 防止在同一时间运行(如果他们都使用同样的规则)
  2. 顺序执行这些2组的工作,你安排他们

顺便说一下:你没有使用job.schedule()来安排你的工作,所以实际上他们甚至不应该使用你发布的代码来执行......

+0

非常感谢你!:) – Volad 2012-02-02 10:49:13

+0

正是我在找的东西! – Markus 2016-02-08 10:26:13