2012-02-02 53 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