转载请注明:http://zazawind.3snavi.com
在编写带进度条的SWT界面程序时,通常会因为某个任务执行需要花费大量时间(下文称为“大任务”),而导致主界面无法响应用户其它操作。比如主界面上有进度条用于显示大任务执行进度,此时大任务如果直接在主线程(UI线程)执行,程序界面要么别动,进度会正常显示,只要一动界面,可能就是白白一片了。
解决此类问题的基本方法就是使用派生线程来执行大任务。
比如按钮响应如下动作:
doJob(){
int cnt = 1000000000000;
for( int i=0; i doSomething();
progressBar.setSelection( progressBar.getSelection()+1 );
}
}
修改成派生线程后,其基本写法如下。
doJob(){
JobThread jt = new JobThread();
Jt.setParent( shell );
Jt.setProgressBar( progressBar );
Jt.start();
}
Public class JobThread extends Thread(){
Private ProgressBar bar = null;
Private Composite parent = null;
Public void setProgressBar( ProgressBar bar){
This.bar = bar;
}
Public void setParent