トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

Thread

別スレッドからUIに対して操作を行う場合、Displayクラスの syncExecメソッドもしくはasyncExecメソッドにスレッドのインスタンスを渡します。 syncExecメソッドは同期、asyncExecメソッドは非同期で引数に渡されたスレッドを実行します。無限ループでバックグラウンド処理するスレッドから、SWTのウィジェットを操作する場合、以下のように操作用のスレッドを新たに作成し、それをDisplay#asyncExecに渡せばOKです。

/**
 * 1秒ごとに画面を更新するスレッド
 */
public class BackGroundThread implements Runnable {
  
  ...
  
  public void run(){
    try {
      while(true){
        Display.getCurrent().asyncExec(new UpdateThread());
        wait(1000);
      }
    } catch(Exception ex){ ex.printStackTrace(); }
  }
  
  /**
   * インナースレッド
   */
  class UpdateThread implements Runnable {
    public void run(){
      // ここで画面を操作
      ...
    }
  }
}

最終更新時間:2004年03月09日 03時56分54秒