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。

?