初学SWT的一些经验分享以及注意事项

来源:互联网 发布:mac版pscs3中文破解版 编辑:程序博客网 时间:2024/04/30 06:27

出处:http://www.blogjava.net/jazzy/

本节介绍我在SWT开发中碰到的问题以及一些经验总结。欢迎批评指正。

  •          上文提到的SWT插件功能十分强大,可以随时打开编辑SWT/Swing GUI,而不像NetBeans一定需要一个对应form配置文件才可以编辑一旦该文件丢失就无法可视化编辑了。但是也有bug和不完善的地方,例如复制/粘贴功能,如果你要复制一个多层结构的Composite时候会导致莫名错误,另外,在跨Class复制Composite的时候会导致Imagefont等属性的丢失。请注意。
  •          SWT运行时需要指定DLL,所以要在运行时加参数,如果觉得在eclipse中每次run都要手工加参数太麻烦的话,你可以把那些dll拷贝到windowssystem32目录下,这样就可以直接run/debug而无需手工指定参数了。
  •          对于熟悉Swing的开发人员来说,初次使用SWT可能对SWT中的组件创建时需要指定父亲组件而感到不适应。
  •          因为SWT是原生WidgetSWTGUI大多直接用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,在同一个线程里,不能申明2Display实例。同样的,一个Display实例也不能跨线程使用。也就是说,如果你要在另外一个线程中显示一个窗体,你必须另外创建一个Display实例。不然会导致异常。)
原创粉丝点击