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