这是一个很长的话题,自从“Sun:放弃Swing,主推JavaFX”,“Sun冻结Swing”的传言出来,整个Swing社区对Sun放弃Swing的可能表示了强烈的反对,由于作为一个成熟Java UI技术,Swing拥有相当数量的开发者,在关于Swing的争论中,要求Sun继续支持Swing的声音不断,一些开发者也澄清了大众对Swing的错觉,详见“关于Swing的六个谎言”。
在09年1月26日,Jonathan Giles 发表了他的博客:“Java Swing 2.0”,要求Sun对Swing 进行合理的改进。
Jonathan Giles 写道
我相信不基于JavaFX的 Swing 2.0的改进非常必要,基于Java框架,专注于桌面开发。我和很多开发者交换了意见,我们认为Swing 2.0 应该有以下改进:
Generics-based 基于范型: 我们不再需要将我们的对象放入不同的Swing 数据模型和组件中,只是为了接受返回对象。它应该能够通过指定数据类型创建swing 模型和组件。现在已经有了一个Swing-generics project 项目,虽然发展的有点慢,但是Swing2.0 应该包含这个项目,不需要重复工作。
Support for enumerations 支持枚举:这个需要是非常明显的,很多public static final int 数据 应该由枚举替换。这可以让API干净很多。
改进对collection frameworks的支持:这就是说我们不需要一直使用Vector lists,除非绝对需要同步。
对事件分发线程 event dispatch thread (EDT) 规则的严格强制:Swing一直速度很慢,这并不是事实,但是让人们这样感觉,这个感觉存在,因为开发者不理解如何控制处理 EDT .现存代码缺乏关于EDT 规则相关的强制,于是不能在EDT上运行的任务执行时间很长。所以,缺省的,Swing 2.0 必须进行EDT 验证,抛出所有异常。这会让开发者不爽,但是结果会让程序运行更快,让用户满意。这很值得。
改进bean绑定和验证 :我不会说到我们需要 properties 那么远,是因为还没有足够的信息给出确认的意见,我知道 JGoodies beans binding and validation 非常有用,让创建数据驱动用户界面容易并且迅速。Java Swing 2.0也应该吸取这些优点。
这篇博客得到了大量的回复和转载,在Swing社区引起了强烈反馈。Sun 也随后在官方博客“Swing and JDK 7”上做了回应:
sun 写道
Swing对于Sun非常重要,我们拥有大量的开发者在Swing 上开发,Swing在Sun 的未来开发蓝图中,在富客户端应用RIA方面,以及其他所有方面都拥有重要位置。
JavaFX也使用了很多Swing 的组件和桌面工具,Sun 很欣喜的看到基于Swing 出现了很多优秀的项目,比如: Griffon, Thinlet, Pivot 和 LWUIT等等。
所以,我们提升了 Swing 的重要性,甚至比JavaFX的下一个版本,甚至比 Java SE 6更重要,将花大力气弥补 Swing 作为UI工具的一些不足,比如让Swing开发更加简单,比如更好的运行时runtime 部署和性能优化。这些方面的进展让Swing开发者获益,并且也让其他依赖Swing的技术也获得优势。
对于Sun来说,在JDK 6 向 JDK 7 转移的期间,首先最重要的是 让运行时 runtime更加轻量化,更快下载,更快启动,对浏览器兼容更好,提升runtime性能。在Java SE 6u10中,已经得到体现。第二个就是Swing 了,让臃肿的Swing减少模板代码和概念上的复杂性,开发典型的Swing应用将使用JDK 7中的 Swing Application Framework.
Sun 将通过OpenJDK 让Sun以外的开发者更加容易为Swing贡献代码,我们已经和 XRender pipline team 团队合作为Java在Unix平台上提供更好的图形加速性能。 在JDK 7中,我们将加入组件类似JXLayer,DatePicker, 和 CSS styling等等。
我们也热切希望能够在JavaFX中使用Swing的功能,尤其对听到什么类型Swing应用能够需要嵌入JavaFX组件有兴趣。
综上,就是Sun保证对Swing继续开发,并且在JDK 7中加入Swing Application Framework.
现在Sun也遵守了诺言,Swing Application Framework (SAF) 开始向社区征询意见。
Alexander Potochkin 发表了博客“Swing Application Framework is back again”。他提出了SAF面临的问题,比如在同一个JVM中运行两个SingleFrameApplication 冲突的问题;在Mac操作系统上,Swing很难提供原生的用户界面等。希望SAF能够成为一个理想的框架,解决Swing遇到的问题,过渡到Java Swing 2.0.