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实例。不然会导致异常。)