SWT Tips and Samples 基礎編 > スレッド |
|
スレッド別スレッドからUIの操作を行う場合、DisplayクラスのsyncExecあるいはasyncExecメソッドを使ってスレッドのインスタンスを与えてやる必要があります。これらのメソッドに与えられたスレッドは、Displayオブジェクト内部にストックされ、描画の都合のよりタイミングで実際に実行されます。UIの操作をsyncExecまたはasyncExec経由で実行しない場合、
イディオムとしては、下に示すようにRunnableインタフェースを継承したクラスのオブジェクトをasyncExecメソッドに与えます。 public Thread1 implements Runnable{ ... public void run(){ //何らかの処理... display.asyncExec(new Runnable() { public void run() { ... SWTウィジェットの処理 ... } }); } } 以下のサンプルプログラムは、ボタンが押されるとプログレスバーが進行しますが、その描画を別スレッドで実行しています。 スクリーンショットソースコードimport org.eclipse.swt.widgets.*; import org.eclipse.swt.SWT; import org.eclipse.swt.events.*; import org.eclipse.swt.layout.*; public class ThreadTest { private Display display; private ProgressBar pb; private Button button; public static void main(String[] args) { new ThreadTest(); } public ThreadTest() { display = new Display(); Shell shell = new Shell(display); shell.setText("ThreadTest"); shell.setLayout(new GridLayout(2, false)); pb = new ProgressBar(shell, SWT.SMOOTH); pb.setMinimum(0); pb.setMaximum(100); button = new Button(shell, SWT.PUSH); button.setText("Press"); button.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { //ボタンの重複押下を避けるため button.setEnabled(false); //メインスレッドとは別のスレッドを生成 new Thread(new ProgressBarUpdater()).start(); } }); shell.pack(); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } display.dispose(); } class ProgressBarUpdater implements Runnable { private int index = 0; public void run() { for (index = 0; index <= 100; index++) { try { Thread.sleep(100); } catch (InterruptedException ex) { ex.printStackTrace(); } display.asyncExec(new Runnable() { public void run() { pb.setSelection(index); } }); } //処理が完了したらボタンを有効にする display.asyncExec(new Runnable() { public void run() { button.setEnabled(true); } }); } } } 参考書籍
最新更新日: 2004年9月1日 |
- PR -
【Sony】大手他社よりも安い!ビジネス向け光・100Mしかも固定IP付!今なら更に初期費用最大15,000円OFF!
オフィス用品・オフィス家具 価 格 交 渉 可!
|
||||
|
|||||
Copyright(C) 2003,2004 Jasmin Project. All Right Reserved. |
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||