今天比较郁闷在写一个swt的线程程序时搞了4个多小时,晕啊!
SWT中的多线程机制和awt/swing中有些不同,这个大家应该都知道,不过还是要说下,
Display对象中负责调用其他线程的方法有以下3种:
● asyncExec(Runnable runnable):异步启动新的线程。所谓异步就是,UI线程不会等待runnable对象执行结束后再继续进行,就是说UI线程可以和runnable对象所在的线程同时运行。
● syncExec(Runnable runnable):同步启动新的线程。所谓同步就是,UI线程会等待runnable对象执行结束后才会继续进行,当runnable对象是耗时大的线程时,尽量不要采用此种方式。另外,对于该种方式创建的线程可通过getSyncThread()方法获得线程对象。
● timerExec(int milliseconds,Runnable runnable):指定一段时间再启动新的线程。用此方法创建的线程,将会在指定的时间后再启动线程。当然用此方法创建的线程启动后,与UI线程是异步的。如果指定的时间为负数,将不会按时启动线程。
另外Display对象中,与UI线程相关的方法如下所示:
● 获得当前的UI线程对象的方法:getThread(),返回Thread对象。
● 使UI线程处于休眠状态:sleep()。
● 唤醒UI线程:wake()。
上面几点都是书里面的原话,不做阐述了.下面我要说的是一个写法的问题,不能小瞧啊,后果很严重.
如果有一个线程他要做的事需要很久比如5分钟,像我这样的初学swt的人一定是new了一个线程然后
getDisplay().asyncExec(线程对象); 结果虽然执行成功,但是界面确