別スレッドから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秒