【IT168 分析评论】对客户端Java技术来说,2008年是喜忧参半的一年,而且在今年可能重新复制这一轨迹。在过去一年中,桌面应用开发者看到了众多创新性新版软件的发布,同时也面临着Swing技术的逐渐淡出,以及对Sun公司能否在全球经济倒退的情况下继续坚持创新的疑问。Java专家Jeff Friesen邀请了Java社区中几个颇具影响力的专家,讨论了在客户端Java开发中那些最引人注目的技术,在回顾2008年重要产品和重要事件的基础上,展望了2009年我们将有望看到的一些趋势。
根据Java.net上的一个调查显示,对Java开发者来说,2008年两个最大的新闻事件就是Java SE 6u10和JavaFX 1.0的发布。不过,在过去一年中客户端Java的重大事件远远不止这一些。
回顾2008
2008年在客户端Java领域最耀眼的明星非Sun公司莫属,在这一年中它发布了Java SE 6u10和6u11、JavaFX预览版、JavaFX SDK 1.0、轻量级用户界面工具包(LWUIT)和NetBeans 6.1和6.5。另外,Sun还举办了首届JVM语言峰会和年度JavaOne大会。
尽管Sun的光芒如此耀眼,也未能完全掩盖Java社区中一些其它事件的亮点。例如,今年业界发生了一个争论,即Sun是否应该将重点放到开发JavaFX而放弃Swing开发;另外,第一个非现任SUN人员成为OpenJDK成员;JFXtras和WidgetFX项目初次登场亮相;甚至微软也在客户端Java领域中凑热闹,宣布支持Eclipse开源项目。
JavaOne 2008:几个值得关注的会议
除了宣布即将推出JavaFX SDK和来自On2 Technologies的一个跨平台视频解码器以外,JavaOne 2008上没有什么令人眼前一亮的客户端Java产品。不过,对于关注该领域技术的朋友来说,倒是有几个会议讲座的内容值得关注。
其中值得关注的一个是JWebPane演示会,它是一个针对Java的新HTML组件。
JWebPane比Swing的JEditorPane更强大,后者只能支持HTML 3.2。该组件基于开源引擎WebKit,支持HTML 4、CSS、JavaScript和DOM,而且是一个完全轻量级的组件,能很好的与Swing组件集成使用。它可以完成众多Java任务,诸如计算组件边界、网络和事件分发等,它的主类JWebPane继承自javax.swing.JComponent。JWebPane项目的技术领导人Alexey Ushakov在去年12月表示,JWebPane的代码将在几个月后将完成,在推出之前将首先推出其API。不过综合各方面因素来看,该组件出现在JDK 7中的可能性不大。
另一个值得关注的讲座是Mikael Grev的MiGLayout布局管理器。Grev与Jeff Friesen谈论了MiGLayout项目的计划:
Q:您能简单的描述一下这个布局管理器,并介绍一下它的吸引人之处吗?
Mikael Grev:MiGLayout使用一个强大但直观的域特定语言(DSL)来定位屏幕上的组件。我认为,MiGLayout之所以将能够流行起来,原因是它能够为用户实现百分之百的优化。它具有许多内置的逻辑和平台规则,因此用户只需要简单的指出组件之间的联系,剩余工作就可以由它来自动完成。JDK中的Swing布局管理器则使用了相反的方式;它们在架构上非常简单,由用户来决定间距、位置等信息。MiGLayout封装了几乎全部Swing布局管理器的功能。除此之外,它还具有一些不错的功能,诸如分辨率独立、可视调试模式和自动化间距和按钮排序等。
Q:据我所知,你正在试图让MiGLayout成为JDK 7核心的一部分。其可能性有多大?
Mikael Grev:我不清楚这个可能性有多大。我认为这不是一个单纯的技术问题;官方可能不愿意包含一个并非它们自己编写的相对较复杂的软件。
Q:是否有计划推出一个JavaFX版的MiGLayout?
Mikael Grev:从一开始开发MiGLayout,我们就特别重视它的可移植性,目前它主要是针对Swing和SWT。它只通过三个代理接口来设计GUI框架类,移植到一个新的GUI框架只需要完成对这些接口的实现即可。因此移植到JavaFX将非常简单,据我所知目前在JavaFX方面没有一个真正的布局管理器,开发者的需求相对较大,因此会有一个JavaFX版的MiGLayout。来自JavaFX团队的Amy Fowler、Dean Iverson和我正在考虑如何最好的来实现它。
JavaOne 2008的最后一个重要讲座是Effective Java Reloaded,由前Sun员工Joshua Bloch主讲,向与会者介绍了如何编写高质量的Java客户端(及服务器端)代码。
Java SE 6u10和6u11
Java客户端平台数年以来一直饱受限制,这是一个众所周知的事实,使得很多开发者不得不转向其竞争对手Flash和Silverlight。举例来说,在一个applet或Java Web Start应用开始运行之前,必须加载整个Java运行时环境JRE。JRE的大小一直非常大,其中JRE 6则更是超过了14MB,因此需要较长的下载时间。为了解决这些限制,Sun推出了Java SE 6u10,其测试版在2008年4月份推出,并在10月份发布了最终版。
在Java SE 6u10中的以下技术可以帮助克服JRE的不足:
·Java部署工具:简化了部署applets和应用程序到不同客户端的复杂性。它包含一个JavaScript文件和一个浏览器插件,可以自动安装一个JRE。
·Java内核:通过只下载运行applets/应用程序所必须的JRE部分,让新用户可以更快速的运行applet和应用程序。然后再在后台下载JRE的剩余部分。
·Java Quick Starter:预先将部分JRE放到缓存中,大大降低平均Java平台冷启动时间。
·新Java插件:通过在浏览器之外的操作系统进程中运行applets,改进了可靠性。如果一个applet运行时出现故障,不会影响浏览器。其它改进包括,每一个applet可以增加自己的堆栈大小,而且加强了Java与JavaScript之间的通信。
Java SE 6u10还修复了一些漏洞,另外还使Nimbus变成默认的界面外观,其它改进之处在此不一一列举。
去年12月份,Sun还发布了Java SE 6u11。该版本侧重于安全性增强和漏洞修复。配合6u10的patch-in-place(修补到位)机制启用了一个新的下载引擎,以降低未来升级所需下载文件的大小。为了避免影响用户的宽带使用,该引擎可以监视和释放自身带宽资源。
JavaFX SDK预览版和SDK 1.0
2008年的JavaFX可以说是让人欢喜让人忧,具有三大看点事件。首先,Hans Muller和Chet Haase让开发者看到了支持JavaFX的基于Java的场景图和动画框架,其中Muller推出了SceneGraph项目,而Haase也在其博客中对此项目进行了介绍。
第二个值得关注的是在7月31日发布的JavaFX SDK预览版。它为NetBeans 6.1提供了一个JavaFX插件,让用户可以从IDE中编译脚本。这个预览版的SDK还提供了Project Nile工具集,它的Adobe Illustrator和Photoshop插件可以让内容设计者轻松导出自己的设计给JavaFX开发者。
第三件事情是,12月4日JavaFX SDK 1.0正式版发布。它包含了一个支持NetBeans 6.5的升级版插件,另外我们还看到了JavaFX Production Suite,Project Nile的升级替代产品。
许多开发者正在使用JavaFX SDK 1.0开发优秀应用程序。JavaFX先驱者Jim Weaver讨论了该SDK的发展情况:
Q:你最喜欢JavaFX的什么功能?
Jim Weaver:其中之一是它以节点为中心的图形界面,任何用户界面元素(包括按钮、图片、布局等等)都是一个二维节点,该功能非常有益于创建iPhone或Web 2.0的富互联网体验应用。另一个备受人们喜爱的功能是它的示例功能,另外它还使用众多已经存在的Java类。JavaFX是一个富客户端Java技术。
Q:在未来版本的JavaFX Script中,你预计会引入什么语言功能或API吗?
Jim Weaver:JavaFX目前只是1.0版,肯定会有一些新的功能会加入,或者会有一些对现有功能的完善,举例来说,在1.0版JavaFX中的某些包中还缺少一些类:
·在未来的版本中,需要为javafx.scene.layout包增加更多的布局类。JavaFX具有一个以节点为中心的图形化用户界面,因此未来的布局策略和布局类需要进行相应的设计。
·javafx.scene.control包具有支持CSS和动态换肤功能的类,但是在该包中只有一个用户界面控制。对于其它用户界面控制来说,JavaFX需要借助于Swing。
Sun公司的JavaFX团队正在开发的其它功能还有很多,诸如单元测试机制、一个更易用的异步线程模式、图表类等等。