SWT中线程异步造成主界面假死
今天帮同学调错的时候发现,它的SWT异步之后,主线程直接阻塞,导致用户界面无响应,找了好久,终于找到是下面的原因:
下面我们来看正确的代码:
// 显示时间
new Thread(new Runnable() {
@Override
public void run() {
while (true) {
Display.getDefault().asyncExec(new Runnable() {
@Override
public void run() {
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
label_time.setText("当前系统时间:" + format.format(date));
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
因为它的写法是 在 Display.getDefault().asyncExec里面while(true)来执行更新操作,但是这样会导致主线程直接假死,因此要在 主线程中new另外一个线程和主线程做并发操作让另外一个线程来更新资源
要先new 一个线程然后在线程里面调用SWT中的异步方法