swt中,默认只有用户线程被允许访问UI图形控件和一些图形API,其他非用户线程如果直接访问这类资源时,SWTException直接被抛出。
如果真有这种需求,必须使用*.widget.Display类中的两个线程同步方法:syncExec(Runnable)和asyncExec(Runnable)。方法syncExec()和asyncExec()的区别在于前者要在指定的线程执行结束后才返回,而后者则无论指定的线程是否执行都会立即返回到当前线程。

例子:
Display.getCurrent().asyncExec(new Runnable() {
 public void run() {
  butt.setText("Push");
 }
});

以下载自某论坛(sorry,忘记了出处),关于内存释放:

Rule 1: If you created it, you dispose it.
Rule 2: Disposing the parent disposes the children.
(from http://www.eclipse.org/articles/swt-design-2/swt-design-2.html)

当使用构造函数来创建小窗口或图形对象时,使用完时必须用手工来除掉它。
如果没有使用构造函数就获取小窗口或图形对象,则一定不能用手工来除掉它,因为您未分配它。
如果将对小窗口或图形对象的引用传送至另一个对象,则一定要小心,仍在使用它时一定不要除掉它。与在使用图像的插件模式中所描述的规则相似。)
当用户关闭Shell时,将递归地销毁 shell 及其所有子代小窗口。在此情况下,不需要除掉小窗口本身。然而,必须释放与那些小窗口一起分配的所有图形资源。
如果创建图形对象以便在其中一个小窗口的生命周期内使用它,则在除掉小窗口时必须除掉图形对象。这可以通过向小窗口注册销毁侦听器,并在接收到销毁事件时释放图形对象来实现。

这些规则有一个例外。简单的数据对象(例如,矩形和点)不使用操作系统资源。它们没有 dispose() 方法,您也不需要释放它们。如果有疑问,则检查特定类的 javadoc。