如何避免带进度条的SWT界面假死

当SWT界面执行大任务时,可能会导致界面假死。解决办法是通过创建派生线程执行任务,更新进度条则使用UI线程的异步调用来实现。错误做法是将任务执行放在UI线程的异步调用中,正确做法是将任务放在线程的`run()`方法内,并通过`asyncExec()`更新界面。
摘要由CSDN通过智能技术生成

转载请注明: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值