2012-03-08 41 views
4

Display.timerExec(int,Runnable)Display.asyncExec(Runnable)とほぼ同じですが、指定された遅延を期待していました。しかし、Display.timerExecだけがGUIスレッド上で実行されるように見えます。その第1行はcheckDevice()の呼び出しです。これは、GUIスレッドで実行していない場合は例外をスローします。Display.asyncExecとDisplay.timerExecとの比較

誰もがDisplay.asyncExec()を使用する手段を提案できますが、実行に先立つ遅延がありますか?

+1

'timerExec()'は現在、Eclipseメーリングリストのバグの母親とみなされています。それで、それは、それが適時に取り除かれることになるので、それを使用しないように準備されるべきです。 –

答えて

6

最初にasyncExecでGUIスレッドに切り替えてから、timerExecでタイマーアクションをスケジュールすることができます。これらの2つの方法は、両方とも何らかのアクションを実行する点で似ていますが、asyncExecはスレッドのみを切り替え、timeExecはGUIスレッドのアクションのスケジュールを設定します。 Javaの8で導入されたラムダ式を、使用

display.asyncExec(new Runnable() { 
    public void run() { 
     display.timerExec(100, new Runnable() { 
      public void run() { 
       doThings(); 
      } 
     }); 
    } 
}); 

、一例は次のように書くことができます。

display.asyncExec(() -> display.timerExec(100,() -> doThings())); 

だから、かつての恐ろしくJavaesque作品は今、非常にきれいです。

+0

...または 'syncExec(...)'を使う... –

関連する問題