我们知道,在SWT中,有两条关于Dispose的法则:
1。如果你创建了它,那么就dispose它。你应当释放那些使用构造器创建了的SWT对象。
2。dispose一个父组件会dispose掉所有的子组件。
由 此可以得知,由于Color,Cursor,Font,GC,Image,Printer,Region都是在DeviceData之上创建,所以如果使 用构造器的话,就必须要手工把这些资源dispose掉,而如果使用Font font = control.getFont ()这样的方式的话,就不可以调用font.dispose()方法,因为它不是被我们创建的。
还可以得知,因为Widget及其所有子类的构造器都需要一个父Widget作参数(常用的也就是Shell或者Composite),所以是不是得到这样的结论:
在RCP应用中,当程序关闭时,Display会被Dispose,那么最顶层的Shell也会被dispose,于是递归下来,所有的Widget也会被 dispose了?所以只需要对自己使用构造器创建的Color,Cursor,Font,GC,Image,Printer,Region调用 Dispose方法就可以了.
还有就是,项目中肯定要用到不计其数的image的,并且图片会被重复使用,如此,最好用SWT提供的org.eclipse.jface.resource.ImageRegistry来管理.