sun 公司在九八年实现了swing类库,并且以“一次编写,到处运行”的理念,使swing迅速成为最流行的java界面开发工具。然而,一段时间证明,swing的最初迷人之处也导致了开发的复杂性和执行的缓慢。因此桌面应用程序很少采用java进行界面开发。
swing的迷人之处在于它能够保证所开发的界面在不同的平台上具有一致的外表和操作,因为swing完全控制了用户界面的生成,也就是说jvm描述空间的每一个像素,并控制其行为。
但是这个方法有其缺点。jvm微观管理界面的外表和行为,这就慢于依赖操作系统来管理。此外,大多数用户偏爱使应用程序的外表符合于每一个操作系统的特殊表现。
swing的另外一个迷人之处在于自动垃圾回收,它保持了java承诺的可靠的计算性。AGC可以使开发者不必关心每个对象的销毁,而集中于代码设计。这样也会产生不好的一面,垃圾回收线程不确定的特征使开发者无法把握资源释放会在何时发生。AGC对于不同的jvm表现也会有所不同,一次在一些大型应用程序中,对时间有要求的对象,其创建和释放在不同操作系统上行为会有所不同。
再提到一点,swing改动了mvc为model-delegate,这种架构分离了模型实体信息和控件外表信息,增强了代码的灵活性和重用性。这里产生的问题是产生了更多的控件相关对象,当界面变得更复杂的时候,额外的创建和释放对象大大增加了处理器的负担。
后来者:SWT/JFace
ecliipse的设计人员针对于swing的复杂性和较低的执行效率,意图开发一套工具,以便更易于界面开发,并保持较好性能的桌面应用程序。其结果产生了两个新的类库swt/jface。
swt/jface利用java native interface与操作系统进行交互,从操作系统中提取控件而不是重新生成,这样一方面可能保证速度并且控件的外表会与操作系统相关,从而符合人们的偏好。
swt/jface放弃了agc。当很多对象构成一个庞大的图形应用程序,内存的分配和释放变得相当重要。agc难于应用到操作系统应用资源。swt/jface提供了dispose方法,一个控件资源的释放可以使其子控件连锁释放,jface的特殊设计,很少需要明确是放资源。
swt/jface对控件的设计没有创建特别规则。开发者既可采用简单的类去实现按钮或标签,也可以采用更加彻底的mvc去实现一个很复杂的对象。
eclipse很容易扩展,源码也可以获得,这样既可以添加任何工具或者按照自己的意愿去更改。现在很多插件提供swt/jface控件的mvc包装器。
swt/jface实行common public license,受open source initiative保护,可以任意进行商业开发。目前支持的平台有:
microsoft windows xp/2000/nt/98/me, microsoft windows poket pc2002 strong arm, redhat linux 9 x86, suse linux 8.2 x86, other linux x86, sun solaris 8 sparc, ibm power pc, hp-ux ll i, hp 9000 pa-risc, qnx x86, mac os。