JavaFX 2.0 Beta 版发布——JavaSE 平台全新客户端​层

阅读数:2218 2011 年 6 月 20 日

话题:Java语言 & 开发架构

Oracle 面向 Java​的富客户端平台 JavaFX 2.0​的第一个公测版已经可以下载,同时提供了 NetBeans 7 的测试版插件。

发布的内容包括:

  1. 用于 JavaFX 的 Java API,是 JavaFX 1.0 产品线的延续。
  2. 新的图形功能,包含图形引擎 (Prism,译为棱镜),结合新的窗口工具包,被称为 Glass(玻璃),连接 JavaFX 平台的独立平台层​与本地操作系统。Prism 支持多种显卡硬件加速​,包括 NVIDIA、ATI、Intel,基于不同平台使用的不同渲染方法 (Windows 的 DirectX,Mac、Linux 还有嵌入式的 OpenGL)。当硬件加速不支持时,Prism 会使用旧的 Java 2D 渲染器。
  3. 多媒体引擎,支持基于GStreamer 框架的 web 多媒体内容回放。这个媒体引擎支持 MP3、AIFF 和 WAV 的音频文件,以及回放采用 VP6 视频编码和 MP3 音频编码的 Flash(FLV) 视频文件。
  4. web 组件,使用WebKit渲染 HTML,使用 Prism 进行硬件加速渲染。
  5. 浏览器插件更新,允许加载基于 Prism 的 JavaFX 应用程序。
  6. 新的 UI 系列组件,例如 Charts(图表)、Tables(表格)、Menus(菜单) 和 Panes(​窗格),所有都这些可以使用 CSS 设置皮肤。

测试版包含一个选择器的示例,Ensemble(​合集)​是 JavaFX 主要的取样器。

JavaFX 2.0 第一版仅支持 Windows,虽然系统体系结构设计为跨平台,Oracle 也明确将多平台​支持 JavaFX:

我们绝对会支持更多的平台,不仅仅是最大的三个 (Mac、Linux、Windows)。​实际上 Java 平台​的价值就是你可以编写跨操作系统和设备的应用。

虽然 Flex 和 Silverlight 都是用 XML 做为其声明语言 (具体是 MXML 和 XAML)​ ,JavaFX​最初却包含一个新的 DSL,JavaFX 脚本。JavaFX 脚本虽然有趣,但是却成为开发者进入的障碍,Oracle 去年宣布虽然继续投资 JavaFX 平台,但不会再支持它。一个基于 XML 声明语言 (目前命名为 FXML) 正在酝酿中,但是它还没有在测试版中使用。

缺乏 JavaFX 脚本​让 API 看起来更详细,但是变化并没有预期的明显。一方面,javafx.builders 包提供了 257 个构建,涵盖了所有 API。另外,在 Java 8 中支持 Lambda 将会有很大差异。Oracle 富客户端软件架构师 Richard Bair 曾经告诉 InfoQ:

JavaFX 设计适合于 Java SE 8 中"lambda"语言特性计划。目前的计划和目标是 lambdas 有助于"单一抽象方法"接口。我们在 JavaFX 中设计新的 Java API 也遵循这个模式,这样当 lambdas 可用时,它们可以自然迁移使用 JavaFX 2.0 的 API。​

除了 Java 的支持,JavaFX 2.0 API 还被设计为友好地替代 JVM 语言,例如 JRuby(示例)、Scala 和 Groovy,还有 DSLs 像基于Visage的 JavaFX 脚本。​

JavaFX 2.0 代表客户端 Java 产品族最重要的更新,提供了 JavaSE 平台整个客户端层的替代品。​Osvaldo Pinali Doederlein 很早就说过:

我们知道 JavaSE 已经过时。我不知道有多少人没有认识到这点,如果你不知道,请再检查一些 Cindy Castillo 的​JavaFX 架构的伟大概述。它不仅仅是一个新的组件库、动画和富媒体。它完全替代 AWT[Abstract Window Toolkit,抽象窗口工具集]​、Java2D、Swing、Java Sound、Applets、ImageIO、Accessibility——简而言之,JavaSE 平台的整个客户端层。(不,一个 JavaFX 应用不再使用 java.applet API。)Oracle​摆脱大量 AWT 和基于 AWT 的一切事物,主要的原因是新浏览器插件更好。

Sun Microsystems 高级工程师、Java Swing GUI 工具集的创始成员之一 Amy Fowler 建议,(要使 Java 成为可行客户端平台)这样的改变是必要的:

用户界面​技术是一个与图形碰撞的过程​。要使 Java 在长期战略中成为可行的客户端平台,它必须天生能有​你所看到的 iPhone/iPad 应用那种视觉盛宴。正如我多次指出,使用 Swing 中 Java2D 有可能实现一些 >(例如 Kirill 非常好的 Trident 库),但是这需要非常复杂的操作,这不是天作之合。问题症结在于,Swing 植根于传统 AWT,而不是集成到 2D 坐标系中。要解决这个问题需要很多不兼容性改变,一旦你朝这条路走下去,那么,你开始问自己还有哪些不兼容性需要改变... 很快新的模型被重新构建,你认识到非常需要新基石。​

虽然​RIA​方面,Adobe 的 Flash 已经占据很久,看起来也会向 HTML5 和相关技术转移,扩展应用在智能机目前一代和表格中的广泛使用表明,基于 Web 的应用仍然扮演很重要的角色。当然,Oracle 看重 Java 和 Swing 在其桌面应用的使用,投资 JavaFX 2.0 最终也会与 Swing 2.0 平台一起开发。

查看英文原文:JavaFX 2, a Completely New Client Layer for the JavaSE Platform, Now in Public Beta