一些經驗
SWT運行時需要指定DLL,所以要在運行時加參數,如果覺得在eclipse中每次run都要手工加參數太麻煩的話,你可以把那些dll拷貝到windows的system32目錄下,這樣就可以直接run/debug而無需手工指定參數了。
- 對于熟悉Swing的開發人員來說,初次使用SWT可能對SWT中的組件創建時需要指定父親組件而感到不適應。
- 因為SWT是原生Widget,SWT的GUI大多直接用JNI調用系統資源(例如Color,Font等),這些系統資源是無法用JVM的垃圾回收機制回收的,所以記得顯式的調用dispose()方法在不需要的時候釋放資源。否則有內存溢出的危險。
- 多線程問題:SWT使用Display類來維護GUI及其使用的系統資源。它禁止用戶在其他線程下訪問GUI資源。例如:
public void run() {
butt.setText("test");
}
這樣的寫法會導致非法線程異常。如果需要在其他線程下訪問GUI資源可以使用如下方法:
Display.getCurrent().asyncExec(new Thread () {
public void run() {
butt.setText("test");
}
})
- Display提供同步異步方法分別是: syncExec(Runnable)和asyncExec(Runnable)。
- 對于Display,在同一個線程里,不能申明2個Display實例。同樣的,一個Display實例也不能跨線程使用。也就是說,如果你要在另外一個線程中顯示一個窗體,你必須另外創建一個Display實例。不然會導致異常。)