2012-02-02 10 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と方法2は、私はまた、両方のメソッドを呼び出すためにいくつかのボタンを持っているseperated.With独自のプログレスバー

を呼び出さでき

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

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

method2()startのジョブが早く実行され、次にmethod1()のジョブが終了したため、この構造は正しく動作しません。私は、方法2を(参加と法1(からジョブを))マーク場合も)(法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. がそれらを実行しますBtw .: job.schedule()を使用してジョブをスケジューリングしていないので、実際には投稿したコードを使用して実行する必要はありません。

+0

ありがとうございます:) – Volad

+0

まさに私が探していたもの! – Markus

関連する問題