Stephen Chin 谈 WidgetFX 和 JFXtras

  • Charles Humble
  • 宋玮

2009 年 1 月 24 日

话题:Java语言 & 开发架构

尽管 JavaFX 刚刚出来一个多月,由于开发者们踊跃尝试 Sun 的新 RIA 平台,已经涌现出了大量项目和例子。Stephen Chin 就是其中的先驱,他是两个开源 JavaFX 项目的主要开发者:WidgetFXJFXtras,他也是即将出版的Pro JavaFX一书的合著作者。InfoQ 采访了他,以了解更多关于他的项目以及他对 JavaFX 的整体印象方面的信息。

InfoQ:你能给我们一些关于你自己及你的开发经历方面的背景信息吗?

当然。我是从 Java 1.0 开始做起的,为 Carnegie Mellon 构建了一个 Java IDE,叫做 Sheets,后来就一直从事 Java 方面的相关工作。我有两个兴趣:开源软件和敏捷开发,它们已经成为开发高质量企业软件的一个非常流行的组合。目前我是 Inovis 的高级管理人员 / ScrumMaster,而在晚上和周末我是 WidgetFX 和 JFXtras 开源项目的项目领导。只要我有空,就会骑摩托车到处转转,或者把我可爱的女儿驾到我的头上。



InfoQ
:JFXtras 给 JavaFX 发布增添了什么能力?

JFXtras 项目是在于 Jim Weaver 的一次谈话中诞生的,在 JavaFX 1.0 发布之前我们就细数着希望 JavaFX 应该具备的一切:包括动态布局、对话框、更好的异步支持、单元测试、更多的组件!所以 JFXtras 0.1 版包括如下特性也就不足为奇了:

  • JFXtras Grid —— 一个纯 JavaFX 声明式的 grid 布局,简单情况下非常易于使用,但是对于复杂布局支持强大的配置(包括 spans、alignment、以及 grow priority)。
  • JFXStage / JFXDialog —— 顺便替代 JavaFX Stage 类,其给出了真正的 Java Dialog,可以访问 Swing 窗口以及许多像 alwaysOnTob、pack 等这样的特性。
  • JFXtras Test —— 一个声明式的、流畅的、行为驱动单元测试框架,让你可以用 JavaFX 语言为 JavaFX 代码编写测试。一旦你习惯了声明式测试的强大能力,你就很难回到普通的 JUnit。
  • JFXWorker —— 一个支持异步 JavaFX 的临时方案。
  • 还有很多……(查看API 文档可以获得完整特性列表)



InfoQ
:JFXtras 项目的目标是什么?

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

除了这些,我们有一个相当高效的、拔尖的、乐于奉献的全明星团队,在接下来的几个月,你们就等着瞧好吧!



InfoQ
:创建 JavaFX Widgets 项目的主要原因是什么?你认为它将用在哪里?

WidgetFX 项目诞生于企业 Java 开发者对高质量、开源、跨平台桌面 Widget 框架的需求。尽管有许多其他框架给消费者提供了桌面 widgets,但它们主要还是 JavaScript 和 HTML 的,这就意味着它们缺乏完整的桌面集成支持,并且有重大安全隐患。而且,由于非常严格的许可协议,阻止了他们在大企业中的采用,这限制了他们的商业使用。



InfoQ
:社区中有许多关于混合及匹配 JavaFX 和 Swing 的评论。在 Swing 应用程序中使用一个 JavaFX Widget 很容易吗?

T 这是个很好的问题,而且已经经过许多讨论了。把 Swing 嵌入 JavaFX 相当容易,已经被用来创建 WidgetFX 的几个第三方 widgets,比如 Ludovic Hochet 的世界时钟

反之,把 widget 嵌入到 Swing 应用也是可能的,但是你必须使用一个无支持的组件,叫做 JXScene,Josh 就此写了个blog

InfoQ:你认为 JavaFX 会对 Swing 开发者产生什么影响?

JavaFX 中的声明式 GUI 编程非常容易让人上瘾。一旦你习惯了新的绑定、触发器及动画支持,你就很难回到老风格命令式的、事件驱动的 UI 编程方法。我相信使用 Swing 构建传统客户端 UI 仍会有用武之地,特别是在 JavaFX 成熟之前。可是,从长远看,开发者需要 JavaFX 提供的高开发效率而企业需要 JavaFX 提供的丰富用户界面技术。



InfoQ
:JavaFX Widgets 已经能与 Flash/Flex 进行一定程度的交互。你能说说这方面的内容以及怎么做到这一点的吗?

我利用了 Alexey Utkin 开发的 JDICplus 类库,在 WidgetFX 中提供了无缝 Flex 集成。再现 JavaFX 相同的用户体验是一种挑战,包括透明和可拖拽 widgets,但是在付出心血之后一切都搞定了。

或许目前最大的限制是平台支持。JDICplus 只支持 Windows,这限制了这一特性的跨平台能力。如果能看到 Sun 将 JavaFX 的 Flex 集成作为优先解决的问题,并创建一个简单的、跨平台的解决方案来嵌入 Flash、Flex 和其它浏览器技术,那就太好了。



InfoQ
:你认为 JavaFX 与 Adobe 的 Flex 及微软的 Silverlight 相比,主要优势是什么?

我认为 JavaFX 的两个主要优势是:Java 集成和手机平台。例如,WidgetFX RSS Reader 是一个只有 250 行的代码,包括许可、注释及配置,而它支持人们所知的所有 RSS 和 Atom 特性。它之所以如此轻量级,是因为它利用了非常健壮的ROME 项目来提供 RSS 支持,这是一个开源的 Java API,从 JavaFX 调用它是小事一桩。目前没有其它 RIA 平台能够像 Java 这样拥有这么多的开源类库和扩展。

还有,JavaFX 手机平台将打破原有格局。过去对大多数开发者和企业来说,手机市场是高不可及的,因为开发能够运行在多种设备上的应用的复杂性大且成本高昂。现在情况不同了,我已经使用 JavaFX 1.0 附带的手机模拟器做了些原型,尽管还不完善,但却可以把作为桌面 widget 运行的同一段代码直接移植到电话上执行,这太令人惊奇了!



InfoQ
:你觉得 JavaFX 在市场上的表现将会如何呢?

我认为现在就此作出任何评论都为时过早,但是 JavaFX 的确已经以令人惊讶的方式激发起了开发社区的热情。我想业界领先的网站开始在其他技术难以匹敌的方面采用 JavaFX,这只是个时间问题。



InfoQ
:你们使用什么样的 IDE 来进行 JavaFX 开发?

我主要使用 NetBeans 进行 JavaFX 开发,如果是 JavaFX1.0,这个 IDE 提供了比较好的支持。我最近还安装并开始使用 Eclipse JavaFX 插件。我也乐见包含了许多允诺的 IntelliJ JavaFX 插件的更新问世。

至于 JavaFX 获得广泛采纳,我认为所有主要 IDE 都包含对 JavaFX 的支持是很重要的,而且支持的力度要和对 Java 支持力度一样。包括:错误高亮显示、自动代码格式化、搜索使用、跨语言遍历(Java 到 JavaFX 以及反之)、快速 JavaFXdoc、条件编译、重构(重命名、提取方法、移动包等等)、模板及代码提示。不同的 IDE 插件都会支持上述列表的部分特性,但是目前还没有一个完全支持上述特性的 IDE。



InfoQ
:你们在开发 JFXtras 和 JavaFX Widgets 时都遇到过什么问题没有?如果有,你们是怎么解决的?

在开发 WidgetFX 和 JFXtras 我们遇到了许多小问题。例如,尽管JFXDialog看起来是一个简单的概念,它实际上需要好几个棘手的工作,在经过数小时检查 JavaFX 反编译代码后这项工作才得以完成。对使用 JFXtras 的用户来说是幸运的,它被很好的抽象到一个文档齐全的类中,我们将把它作为核心 JavaFX 类库改进来维护。

另一个例子是CacheSafeGroup,它用 JavaFX 节点上的缓存变量修订了多显示器的一个 bug。我们把缺陷已经记录在案,而 JavaFX 团队明确将在下一版本修订这一错误,但是 WidgetFX 项目不能因此中断,因此我们实现了一个可重用的替代方案,它顺便替代了 Group。



InfoQ
:你的项目从 Sun 那儿获得了多少支持?

Sun 的伙计们非常忙,但是很支持我们。Joshua Marinacci 是官方 WidgetFX PR 项目成员,在撰写博客和向 JavaFX 社区宣传方面做出了杰出贡献。而且在各种场合,只要我逮到他们,他们总是热情地倾听我们的满腹牢骚,并向我们询问更多反馈,以便将 JavaFX 平台做得更好。



InfoQ
:你对那些考虑在企业应用中采用 JavaFX 的人们有什么样的建议呢?

有几件事情对于任何商业 JavaFX 项目的成功都是至关重要的:
  • 与你的图形设计团队紧密合作——JavaFX 是一个复杂的新模型,不受传统浏览器限制,因此让设计团队了解他们可以利用的能力是很重要的,包括新的 JavaFX 产品套件。
  • 从你的客户那儿获得早期反馈——使用 JRE1.6.0_10 中新的内核安装器,创建一个无缝部署体验将比以往更加容易。可是,如果你预先知道客户机器限制只能使用老的 Java 版本(比如 1.5),那么你就可以针对那个平台来安排 JavaFX 开发。
  • 不要重复发明轮子——JavaFX 1.0 出厂产品并没有提供给你构建企业应用所需的所有东西,但是你可以利用第三方项目如JFXtras(自卖自夸),不至于让自己陷入到维护许多重复的底层架构上。



InfoQ
:来年你最想看到 JavaFX 什么东西?

我有一个无止境的愿望列表,即便是圣诞老人都无法满足我的需要,但是其中一些比较关键的是:
  • 异步支持——JavaFX 没有一个干净的执行模型,以支持长时间后台任务执行。这对编写高性能应用的开发者来说非常重要,最终将会影响该语言的成功。JFXtras JFXWorker是向正确方向迈出的一步,但是仍受限于核心运行时中的一些限制。
  • 在 Java 中内嵌 JavaFX——如果有全面的支持机制能够在 Java 中嵌入 JavaFX,那太好了。除了为现有 Swing 应用提供移植路径外,这将为 JavaFX 的进一步高级应用提供众多可能。
  • Web2.0 集成——Web 上有大量可用的服务及技术, JavaFX 的采用将从中受益。正如我先前提到的,对 Flash 和 Flex 的内建支持将帮助与地图服务的集成,比方说 Google Map。JavaFX 桥接当前开发社区所使用技术的能力越强,将来 JavaFX 平台就越成功。



InfoQ
:你还要补充些什么吗?

我非常高兴能与 Jim Weaver 和 Weiqi Gao 合作出书。Jim 或许是当前 JavaFX 社区的最重要的联络人,而 Weiqi 是个绝对的语言天才,因此我们合力创作,一定会写出令人印象深刻的作品。它将确定在 JavaOne 之前出版,到时候一定要搞上一本并来参加我们的专题会议(session)!

查看英文原文:Stephen Chin on WidgetFX and JFXtras

Java语言 & 开发架构