读书人

【转】SWT Designer 上 SWT的线程

发布时间: 2012-10-26 10:30:59 作者: rapoo

【转】SWT Designer 下 SWT的线程

多数情况下,GUI界面编程不需要考虑线程问题,SWT已经帮助我们隐藏了底层的线程调用。但一些特殊应用,却不得不涉及SWT线程编程。
??????? 在实际项目开发中,一种常见的应用是:单击前台界面的执行后,在后台要做一些任务处理,任务执行情况要反映在界面上,而且还不能影响前台界面的其他操作
??????? 这种应用的实现思路如下:
前台界面和后台程序分开2个类。
为后台程序另开一个线程,这样就可以让前台操作不受后台影响了。
前台界面提供一些可操作的组件的方法,后台处理程序调用这些方法,将执行情况的字符串写到前台界面组件中。
??????? 这种思路必须解决一个关键问题:界面本身有一个默认线程,后台程序又是另外一个线程。那么该如何在一个线程中访问另外一个线程呢?
??????? (1) 为后台新开一个线程,这要用到JDK中线程的知识,代码如下:

【转】SWT Designer 上 SWT的线程????????new?Thread(){?//?新开一个线程,这是匿名内部类的写法
【转】SWT Designer 上 SWT的线程????????????public?void?run(){
【转】SWT Designer 上 SWT的线程????????????????//开始后台任务
【转】SWT Designer 上 SWT的线程????????????}
【转】SWT Designer 上 SWT的线程????????}.start();//start表示立即开始线程

????? (2) 从后台处理线程中访问前台界面组件,关键在于使用display对象,因为display主要负责管理时间循环和控制UI线程和其他线程之间的通信。display的具体使用方法如下:

【转】SWT Designer 上 SWT的线程????????Display.getDefault().asyncExec(new?Runnable(){//又是一个匿名内部类写法
【转】SWT Designer 上 SWT的线程????????????public?void?run(){
【转】SWT Designer 上 SWT的线程????????????????//对前台界面的操作
【转】SWT Designer 上 SWT的线程????????????}
【转】SWT Designer 上 SWT的线程????????});

????? 在这里的display对象很关键,因此顺便给出得到display对象的2种方法:
Display.getDefault(),得到一个默认的display对象,应用程序一般只需要一个display对象。
Display.getCurrent(),得到当前运行线程所在的display对象,如果生成2个以上的display对象,则可用此方法。?

读书人网 >编程

热点推荐