技术开发 频道

客户端Java的革命性飞跃

 【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团队正在开发的其它功能还有很多,诸如单元测试机制、一个更易用的异步线程模式、图表类等等。

  JFXtras是一套针对 JavaFX脚本开发者的附加组件和工具,其主要开发者Stephen Chin谈论了JFXtras项目以及整个JavaFX项目相关的信息。

  Q:你最喜欢JavaFX的什么地方?在未来的JavaFX SDK版本中,你最希望看到什么改进?

  Sephen Chin:我不得不说,JavaFX让我迷上了使用绑定方法。现在我已经很难再回到以前那种事件监听和使用get/set方法的编程方式。

  在功能改进方面,我希望Sun能够对JavaFX进行如下改进:

  ·JavaFX API源代码:

  ·在Java中嵌入JavaFX:如果有全面的支持机制能够在Java中嵌入JavaFX将更加强大。除了为现有Swing应用提供移植路径外,这将为JavaFX的进一步高级应用提供众多可能。

  ·Web 2.0集成:Web上有大量可用的服务及技术, JavaFX的采用将从中受益。正如我先前提到的,对Flash和Flex的内建支持将帮助与地图服务的集成,比方说Google Map。JavaFX桥接当前开发社区所使用技术的能力越强,将来JavaFX平台就越成功。

  Q:你能描述一下JFXtras项目所带来的好处吗?

  Stephen Chin:JFXtras是JavaFX社区为自己编写的一个项目。Sun一直在为推动JavaFX技术进行着优秀的工作。而在JFXtras项目中,我们则专注于填补所有小的漏洞和差距,以使其更适合开发真实的应用程序。

  如果你把JavaFX Script看作开发Java RIA应用的基础,那么JFXtras则是开发全功能产品的有益和必要的辅助工具。JFXtras中的所有组件都有详细的文档,都经过详细测试。

  Q:计划对JFXtras增加什么新功能吗?

  Stephen Chin:由于JavaFX 1.0版刚刚发布一个多月,JFXtras 0.1版具有一个灵活的Grid布局、Java Dialog支持、一个异步Woker类、一个声明式单元测试框架和众多小改进。

  尽管0.2版内容还未最后确定,除了在Grid和单元测试方面的改进外,我们还规划了一些重大的新特性。Groovy GraphicsBuilder的Andres Almiray已经加入了我们团队并把他的jSilhouette图形库移植到JFXtras项目,它将提供了很多漂亮的图形基本元素,如十字形、星形、球形以及Reuleaux 三角形(crosses、stars、balloons、Reuleaux triangle)。我们还将拥有JavaFX的首个图表工具,提供由Ben Jone编写的很酷的JavaFX饼图组件,最近在Jim Weaver的blog上提到了这一特性。

  备注:根据Jim Weaver的最新博客文章称,JFXtras 0.2版目前已经开始提供下载。

  轻量级用户界面工具包(LWUIT)

  LWUIT的到来,让移动设备开发者兴奋不已,它是受限配置设备用户界面 (limited Configuration Device UI,lcdui) 的继任者,提供了一个更加复杂的API,让你可以充分利用类似Swing的功能,来为移动应用创建用户界面,它提供了大量的小部件、主题和动画转换等功能。

  NetBeans 6.1和6.5

  Sun NetBeans IDE的许多用户把这两个新版本都当作一次大事件看待。4月份NetBeans 6.1发布,包含了很多新重大功能。Sun后来使用6.1版来运行预览版JavaFX插件。大约11月中旬Sun又发布了NetBeans 6.5。其新增的重要功能包括支持Groovy。你可以更轻松、更快速的创建纯Groovy代码或混合使用Groovy和Java代码的客户端应用。另外,Sun还集成了JavaFX 1.0到NetBeans 6.5中。

  Sun公司NetBeans专家Tim Boudreau谈论了NetBeans 6.5中他认为最重要的新功能,以及NetBeans的未来。

  Q:你认为NetBeans 6.5中最重要的新功能是什么?

  Tim Boudreau:NetBeans 6.5的新功能有很多,不过我最喜欢的应该是我可以更少的键入代码来实现我的目的。

  另外Boudreau还提到了NetBeans 6.5对非Java编程语言开发的支持,例如对PHP、HTML、JavaScript、Ruby和Python的支持。

  Q:2009年新版NetBeans将何时推出?它将包含什么新功能?

  Tim Boudreau:体验新功能最好的办法就是下载一个development build 版本!有两个功能值得大家期待:

  ·自动创建项目:这个插件将把任何具有一个创建脚本的目录看作一个项目,无需任何设置,就可以分析该创建脚本,设定你的classpath、完成代码等。现在用户就可以下载该插件,并立即对其进行体验。

  ·即编译即保存。许多开发者要求增加这个功能,不过实际上创建这个功能却比较复杂,因为在其项目架构中它使用的是Apache Ant。在NetBeans 7中,有望包含该功能,它有望节省重编译的时间。

  在NetBeans 7.0还将包含大量改变,它新增支持的语言将会更多。通过微博客Twitter可以及时了解这些最新功能。

  JVM语言峰会

  通过2008JVM语言峰会我们可以看到,Java正在变为一个以平台为中心的技术,而不仅仅是一门编程语言。尽管许多人担忧Java语言的发展速度越来越慢,但JVM本身却正在经历一场革新。

  在2008年1月,Sun启动了Da Vinci Machine项目,又被人们称为多语言虚拟机。这个项目的目的是引入一个有效支持动态类型语言的JVM,其中包括对JVM指令invokedynamic的支持。

  由于Da Vinci需要来自动态语言社区的支持来帮助其开发,来自Sun的JVM工程师在9月份举行了为期3天的JVM语言峰会。峰会首日首席工程师Mark Reinhold表示,从JDK 7开始,invokedynamic将成为JVM的一部分。

  从这次大会上,Sun工程师收集到了大量JVM功能修改请求。鉴于这次峰会的成功,在2009年Sun有可能继续举办该会议。

  Swing、SwingX和JavaFX

  对于众多Swing/SwingX开发者来说,2008年是令人不愉快的一年。这个阵营的开发者不满意Sun公司将重点放在JavaFX上,认为这伤害了Swing的进一步开发。他们对Sun公司的停止继续投资SwingX项目感到非常愤怒。

  Kirill Grouchnikov曾经写了一篇题为“Sun正在放弃核心Swing”的博客,近日他再次阐述了他的观点。

  Q:在您的博客中写到:“在Sun内部,核心Swing正在作为一种UI的技术遗产而逐步退休。”你是否暗示Sun对Swing没有未来规划?自从你发布该博客上,是否有所变化?

  Kirill Grouchnikov:在客户端Java技术的近期和长期计划方面,Sun公司一直非常不透明,与外界缺乏交流,这与其所宣称的开放原则是背道而驰的,当然JavaFX是一个例外。我认为,在过去的一年半中,Sun将过多的精力放在了JavaFX上,已经影响了Swing的开发。

  自从我发布该博客以来,Sun暗示在JDK 7中将可能包含新的Swing模块,但我现在更对此持怀疑态度,观望其能否成为事实。JavaFX还远未达到Sun公司的预期,因此它将在2009年继续投入大量人力来完善它,2010年也将如此。

  Q:你的博客中还表示,“Sun已经停止了对SwingX项目的资助。”这将对SwingX项目的继续开发带来什么影响?

  Kirill Grouchnikov:SwingLabs诞生于2004年,已经为Java客户社区带来了众多成果。由于Sun停止资助SwingX项目,其开发的进度将会非常慢,众多SwingX的开发工作将被放到社区志愿者手中。尽管他们的工作也非常重要,但是如果经过四年的开发还没有发布1.0版,这很难让商业公司有兴趣使用SwingX进行开发。

  其它:OpenJDK、Ganymede和桌面应用

  Sun公司在JavaOne 2006大会上宣布Java将被开源,随后OpenJDK项目诞生,该项目正在创建一个开源版的JDK 7。在2008年OpenJDK经历了一些具有里程碑意义的事件。一个完全开源的JDK 6被绑定在Fedora 9 Linux版本中。另外一个更重要的发展是,OpenJDK接受了来自Roman Kennke所提交的代码,这是OpenJDK首次接受来自非Sun员工的代码。

  在Sun忙于研发NetBeans的同时,Eclipse基金会也加大了其竞争IDE工具的研发,该基金会发布了Eclipse Ganymede,其包含Eclipse平台3.4版和23个项目。另一件比较有意思的事情是,在去年3月份的EclipseCon大会上,微软的Sam Ramji宣布微软将开始与Eclipse基金会合作。

  2008年,其它Java社区的成员也在忙于发布客户端Java产品。例如,Michael Kölling在9月份为NetBeans 6.1推出了一个BlueJ插件,在10月份则推出了BlueJ 2.5.0。

  当我们展望2009年时,我们可以确定客户端Java技术将迎来一些新的发展。首先,JDK 7将在JavaOne大会上上次亮相。另外,我们还将看到JavaFX Mobile SDK和其它JavaFX版本的到来。毋庸置疑,我们将更多的使用JWebPane。

  JavaOne 2009和JDK 7预览

  在去年12月中旬Danny Coward曾表示,在JavaOne 2009大会上将展示JDK 7,分享最终将出现在JDK 7中的功能:

  ·Jigsaw项目实现模块化JDK

  ·新垃圾收集器Garbage First

  ·更好的性能

  ·语言改变

  ·新I/O机制NIO2

  ·Swing应用框架

  ·Java类型注释

  ·XRender图形管线

  ·支持流控制传输协议(SCTP)

  ·支持Unicode 5

  Coward建议人们去Joseph D. Darcy的博客(http://poena:9992/Rhythmyx/psx_ceArticle/blogs.sun.com/darcy/)去了解更多可能的改变,Darcy在其博客“为JDK 7小部分更改准备的JSR即将发布 (http://blogs.sun.com/darcy/entry/small_language_changes_jdk_7)”中表示,他将领导Sun的开发团队为JDK 7中小部分改进而努力,并将在上半年提交一个相关JSR。Darcy表示,尽管最后的语言改进还没确定,但String转换和多重异常捕获是比较有可能的改进。

  Project Coin

  Joseph Darcy宣布推出了OpenJDK项目Project Coin,来包含将在JDK 7中包含的小规模语言改进。

  我们还可以增加Java SE 6u10的部分功能(Nimbus、透明窗口、Java Kernel等等)到前面的JDK 7功能列表。

  在JavaOne大会的JDK 7预览中,如果某个API(或某个其它的功能)不能出现,并不意味着真正无缘JDK 7,也有可能在2010年JDK 7最终版发布之前的时间再次加入。

  2009:JavaFX年

  对JavaFX来说,2009年注定是令人兴奋的一年,随着时间的过去,我们将看到更多关于JavaFX的改进。

  尽管JavaFX 1.0版已经包含了一个测试版的JavaFX Mobile运行时,可以让你在兼容MSA的手机上运行丰富体验的JavaFX应用,但是开发者应等到2月份JavaFX Mobile发布后,来使用JavaFX Mobile SDK。

  在2009年,JavaFX还可能出现一些其它重大发展。年中有望推出一个针对JavaFX的可视化设计工具。我们还可以期待JavaFX 2.0(至少亿预览版的形式)到来。另外,我们可以期待会出现更多的JavaFX SDK更新。

  在2009年JavaOne大会上,除了JDK 7值得关注外,预计还将发布更多JavaFX产品,新版的NetBeans和LWUIT也会在2009年推出。Java SE 6预计也会升级到新版本。Java SE 6u12将很快面世,除了意料之中的漏洞修复外,它还将增加如下功能:

  ·支持Windows Server 2008;

  ·为运行Windows和Linux的AMD64位计算机带来64位Java插件和Java Web Start支持;

  据Richard Bair表示,在JavaFX 2.0中我们将看到一些新功能,Sun正在研发一个新用户界面控制工具集,正在努力大幅提高JavaFX中图形堆栈的性能,正在实现JavaFX对更多Web服务的更好支持。

  随着JavaFX变得越来越普及,许多开发者可能希望创建他们的Swing产品的JavaFX版,其中有些将在2009年推出。举例来说,我认为下半年我们可以看到一个JavaFX版的MiGLayout。

  总结

  在2008年的客户端Java开发中,有三大客户端Java产品影响深远:

  ·Java SE 6u10:Java SE 6u10的到来标志着改进客户体验的Java时代的开始。首次实现了,用户可以无需等待太长时间下载整个JRE来运行一个Java程序。这种体验在Java SE 6u11及其以后的升级版本中将继续完善,未来的JRE版本将受Jigsaw项目所影响。

  ·JavaFX:通过JavaFX,Java开发者可以让用户界面在多种设备上通用。只要我们使用相同的轮廓,就可以在桌面、手机和电视机顶盒等上面实现相同用户界面的应用。相比之下,Swing只能让我们创建桌面用户界面。如果我们希望创建一个手机用户界面,我们需要借助于LWUIT。

  ·Da Vinci Machine Project:由于现在的JVM提供静态类型的指令集,它不容易支持动态类型语言。根据语言不同,所需的开销不同,这可以影响一个程序的运行效率。通过使JVM更友好的支持动态,我们有望最终看到更多客户端开发发生在动态语言上,而并非Java语言。而且我们可能不用等多久就会看到这个新语言功能的到来。

  客户端Java的发展是否会受到当前经济低迷的影响,这是一个尚无结论的问题。当Sun公司在服务器销售和技术支持服务方面的收入大幅下滑后,它是否还能保持Java的创新?或许经济压力最终迫使Sun放弃在客户端Java上进一步创新。不过,从本文中我们可以看出,人们对Java客户端改革的呼声已经比以往任何时候都响亮。

0
相关文章