写点什么

JavaFX 技术预览

  • 2008-11-24
  • 本文字数:3857 字

    阅读完需:约 13 分钟

Java 的成功可以归结于这样一个事实:它在其所面向的领域里是门非常优秀的通用语言。对于现代企业计算中典型的长时间运行的服务器端编程,以及其它诸如 以支持跨平台、稳定性和安全性为关键的移动开发等方面,Java 都是一个不错的选择。但对于一些需要一定程度的专业知识的编程任务,Java 和所有通用语 言一样不是非常合适。比方说挑战技术和管理的现代 GUI 设计。

从管理角度来看,一个流畅、复杂的用户界面通常需要一些不同的角色——图像艺术家、信息架构师、动画设计人员和程序员。虽 然某些人可以担当起所有的职责,但这类人绝对是少数。通常来说,整个开发过程需要不同的工作人员的参与,设计人员和开发人员之间资源的来回流动常常是个大 问题。技术方面,现代 UI 设计需要高层次的技术知识。类似 Swing 这样的复杂工具包,它为开发人员提供了一套复杂的控件,但在创建 UI 时,开发人员需要 花很多时间去学习其使用方法。此外,界面的响应能力在很大程度上依赖于并发性。这本身不是什么问题——Java 多线程编程很简单——但随之带来的是大量的 管理转换和动画的固定代码。

Sun 凭借 JavaFX 介入富互联网应用领域,向 Adobe 的 Flex 和 Microsoft 的 Silverlight 宣战。JavaFX 无疑是 Sun 为 Java 开发人员解决相关问题的策略之一。它的目标在于为创建横跨桌面、互 联网和移动设备的富互联网应用提供一个基础平台,这也可以看出 Sun 的 Java 系列产品的一个重大转变,它不再仅仅专注于底层技术,而是开始创建完整的解 决方案。目前的技术预览版包括两个主要组件:关注于设计人员 / 开发人员工作流的 Nile 项目和 JavaFX Script——一个编写 Java GUI 应用的新型说明性语言(declarative language)。

Flex 和 Silverlight 都选用 XML 作为自己的说明性语言(分别使用 MXML 和 XAML),而 Sun 却选择重新开发一门新的脚本语言——JavaFX Script。Sun 高级工程师 Joshua Marinacci 告诉我们,Sun 不打算添加对 XML 语言支持:

“我们发现很多开发人员非常讨厌 XML,他们想要的是一个为图形界面优化过的更为简洁的说明性语法。我们相信熟悉 JavaScript 的开发人员会发现 JavaFX Script 非常好用。”

JavaFX Script 是一个说明性的、静态类型的、编译的、领域特定语言(DSL),它建立在 Java 标准版和缩微版的基础上,使用来自 JavaFX 环境的 Java 包来创建用户界面。它主要针对两类用户组:

  1. 已经熟悉 Swing 但仍在寻找一种更快更有效的方式来创建富功能界面的 Java 开发人员。
  2. 熟悉其它脚本语言例如 JavaScript 或 ActionScript 的 Web 开发人员。

JavaFX Script 的开发效率很高,拥有一些非常方便的用于插入和删除操作的功能(比如,insert 10 before x[1];)。它还解决了其它很多常见问题,例如,它可以轻松地把 UI 组件绑定到后台数据库;它通过一个简化的类似监听者的机制(称为事件触发器)在变量 值改变时触发相应的事件。

Sun 在语言的可读性上苦下工夫,使它易于掌握,容易读懂。但这样做的一个结果是,他们在 Java 和 JavaScript 中使用了类似 BASIC 的布尔操作符而不是 C 风格的操作符。所以,JavaFX Script 用“and”替代 &&,用“or”替代||。另外,它能够同时支持“not”和“!”。适应这样的用法不需要很多时间,但我 的确发现很多客户都对此感到很惊讶。

JavaFX Script 还有其它一些方面也很让人吃惊。比方说,它虽然支持使用保留字来创建函数或者变量,但它却要求用法式引号消除原意——例如,ar <> = 100——而非通过情境分析来判断。再比方说,JavaFX Script 选择支持多继承而不采用 Java 的接口方式。Marinacci 解释说:

“GUI 环境下,我们发现使用多继承可以简化很多任务。大多数情况下,开发人员没必要用到创建子类,所以这不是什么大问题。子类的应用主要集中在组件开发上。”

JavaFX 借鉴并增强了一些源自的 Java 的思想。值得一提的是 JavaFXDoc 在 Javadoc 的基础上对文档工具做了 必要的更新。JavaFXDoc 放弃了 HTML,选择生成 XML 格式文档,随后转换成其它输出格式。目前的格式是 XHTML1.0。这种两步走的策略为将 来支持其它格式例如 PDF 或者建立存储知识的数据库的可能性保留了实现的余地。新的输出格式不使用 frame,可以很容易地通过 CSS 对其格式化。它同时 还可以对各个 profile 做基本的过滤——例如,JavaFX API 被分为通用、桌面和移动 profile,可以正确过滤文档。这里有一个例子。另一个能够体现高效开发的功能是JavaFXDoc 通过@examples 标识生成内部示例。示例代码自动根据语法高亮显示,然后文档工具编译和执行示例把结果截屏贴到文档中,提供了一种自动更新文档截屏的方法。

我们与Marinacci 还谈到了这项工具的未来开发计划,他证实Sun 正在开发一个搜索解决方案,但1.0 版不会提供。对核心Javadoc 工具的更新目 前暂定在Java 7 发布,他相信Javadoc 未来版本的开发会吸取JavaFXDoc 带来的经验教训。JavaFX Script 可以访问所有现存Java 包,它本身也包含了一些新的API。其中两个关键API 是媒体 API(目前提供的是原生库版本,在1.0 版中将以 On2 TrueMotion video codecs 取 而代之)和场景图形 API。场景图形 API 体现出具有 Swing 技术背景的开发人员通常思考 GUI 的方式的转变。这里 GUI 代表了一系列层次的可视化节 点,这些节点组成场景并与用户交互。场景图像模型支持效果、任意变换(缩放和旋转)和动画。场景图形保留图形对象,每当页面刷新时都会重画图形,这就隐藏 了处理重画的细节、缓存和其它类似于 Java2D 那样的即时性 API 问题。这种层次的抽象也允许 API 进行各种优化,例如预加载纹理和图形卡的原型。场景 图形 API 与 JavaFX 紧密关联,但你也可以在普通 Java 程序中应用。

Sun 把 API 分成 3 种 profile,目前可以用的有 两种:通用 profile API 在所有设备上都可用,包括场景图形 API 和媒体组件,而桌面 profile 则更类似于 Swing 组件。第三种是移动 profile,预计在 2009 年发布,对移动设备开发人员可能是一个完整的应用栈,不过目前没有详细的公开的信息。

截至到撰写本文时,通用 API 尚且存在一两个重大的遗漏——例如,JavaFX 预览版中没有和 Table、TabbedPane、TextArea 或 BookPanel 相同的对象。1.0 版应该会更为完整些。 Marinacci 告诉我们:

“我们计划把 Swing 组件移植到子类节点,然后就可以自由地把 Swing 组件和图形节点混合在一起,不需要再使用适配器类。目前,高级类(例如树和表格)只在桌面系统上可用。”

开发一个新的语言而不是听从 Adobe 的领导是一个大胆的尝试,我觉得这个很好的决策。JavaFX Script 很好用,而且除了目前的应用外还有其它一些可能的用途——例如,JavaFX 数据格式(FXD),这是 Nile 项目的一个关键部分,采用 JavaFX Script 说明性格式的一个子集来表示图形资源。

Microsoft 为 Silverlight 提供了特别的工具箱(Expression 工具包),直接转换 Adobe 的 Creative Suite 的输出文件。Sun 也正在开发自己的工具(预计明年),他们决定通过 Nile 项目来支持目前流行的一些工具,这些工具中首当其冲的是 Adobe 的 Illustrator 和 Photoshop。

Nile 项目支持 OS X 和 Windows,它包含特别针对 Adobe Illustrator 和 Photoshop CS3 的插件、一个 SVG 转换工具以及 JavaFX 数据格式(FXD)查看器。使用 Adobe 工具的设计者可以像往常一样创建图形资源,最后以 FXD 的格 式输出。用户可以通过查看器来浏览图形文件,以确认输出的文件如期望的一样。开发人员还可以通过 JavaFX 脚本语言来访问和处理组成图形资源文件的各个 图层。这些操作对于图形资源的处理表现地很好,但定制样式到基本组件却仍然是个问题。Sun 目前正在研究如何利用 CSS 包装 Swing 组件,这是 JavaFX 1.0 版中计划实现的目标之一。

所有这些工作都在 Java 6 Update 10(正式名称为消费者 JRE 项目)的基础上完成——对部署、性能、内存使用和内建的感观(Nimbus)的改善更有助于推动 Swing 高效地开发桌面应 用。可惜的是,目前对开发人员来说,这些改善仍然很有限。尽管 Sun 公司已经发布了 update 10 的 Windows、Linux 和 Solaris 版本,但这几个版本在 applet quickstarter、内核安装文件和 Direct3D pipeline(仅限于 Windows 平台)方面的实现方式完全不同。此外,苹果公司在所有 64-bit Intel Mac 的 OSX 10.5 上对 Java 6 都有所限制。 Marinacci 也向我们证实了 Sun 正在与苹果合作改善 Java 和 JavaFX 对 OSX 的支持的消息,但没有透露任何细节。同时,他还向我们提供了最 新的下载统计数据:

“JRE 每月平均有 4000-5000 万次的下载,有些月份会达到 1 亿。这些下载 95% 是 JavaSE 6。在 JavaSE 6 update 10 正式发布数月之后,它会开启自动更新,我们期望能够看到类似的数据。根据 Omniture 的统计,连接到因特网的计算机有 91% 都安装了 Java。”

Flash 和 Silverlight 都是完全封闭代码的专有工具,对于某些开发人员来说在使用上是一个巨大的障碍。由于 Flash 中的很多关键代码例如音频和视频解 码器都由第三方授权使用,Adode 因此很难像 Sun 开放 Java 那样轻松地开放 Flash 平台。虽然 license 还没有最后敲定,但 Sun 正在努力把 JavaFX 作为开源软件发布,目前他们已经在 GPL v.2 license 下发布了编译器和场景图形 API。开源也许能够显著提高 JavaFX 平台的普及率,然而,若想成为有力的竞争者,JavaFX 还有很多重要 的工作要做。

查看英文原文: Java FX Technology Preview


志愿参与 InfoQ 中文站内容建设,请邮件至 editors@cn.infoq.com 。也欢迎大家到 InfoQ 中文站用户讨论组参与我们的线上讨论。

2008-11-24 01:354785
用户头像

发布了 501 篇内容, 共 262.4 次阅读, 收获喜欢 61 次。

关注

评论

发布
暂无评论
发现更多内容

软件测试 | 测试核心:如何减少线上故障?

测试人

软件测试 软件质量 自动化测试 测试开发

DTALK直播预约 | 12月8日开播:后疫情时代,制造企业如何实现数字化转型?

袋鼠云数栈

数字化转型

4.0体验站|OceanBase 4.0,从分布式到单机,从单机到分布式

OceanBase 数据库

数据库 oceanbase

一站式动态多环境建设案例

阿里巴巴中间件

阿里云 微服务 云原生 中间件 客户案例

DQMIS 2022第六届数据质量管理国际峰会议程新鲜出炉

数据质量管理智库

大数据 数据 数据治理 数据安全 隐私计算

实时数据赋能制造业产能升级:详解半导体和汽车制造行业最佳实践(活动报名)

tapdata

制造业 数据集成 汽车制造 实时数据 半导体行业

亚马逊CTO Werner Vogels 演讲Keynote:世界一直无序地运转向前 @AWS re:Invent 2022

B Impact

如何用 7 分钟击破 Serverless 落地难点?

Serverless Devs

通过认证|龙智正式成为Atlassian云专业伙伴

龙智—DevSecOps解决方案

云原生

世界杯太精彩了,带大家用Python做个足球游戏,边玩游戏边看比赛

Lansonli

Python游戏 Python足球游戏 世界杯足球游戏

MMM互助系统开发智能合约部署

薇電13242772558

dapp

React 之 Refs 的使用和 forwardRef 的源码解读

冴羽

JavaScript react.js 前端 前端框架 React

版本控制 | 一文了解什么是组件化开发,以及如何从单体架构转向组件化开发

龙智—DevSecOps解决方案

组件化 组件化开发

神秘新品即将来袭!大上科技开启护眼新未来倒计时

硬科技星球

EasyRecovery2023不要钱的硬盘数据恢复工具

茶色酒

EasyRecovery EasyRecovery15 easyrecovery2023

Golang中利用BPF进行动态追踪

MatrixOrigin

Go 数据库 云原生 MatrixOrigin MatrixOne

AWS CEO Adam Selipsky 演讲 Keynote @ re:Levent2022

B Impact

源码解析:Dubbo3 的 Spring 适配原理与初始化流程

Apache Dubbo

Java 开源 微服务 dubbo

如何设计业务异地多活架构 - week7

in9

代码安全与质量 | 在这个充满变数的时代,花小钱办大事

龙智—DevSecOps解决方案

代码质量 代码安全检测 代码安全 安全防护

实践案例丨CenterNet-Hourglass论文复现

华为云开发者联盟

人工智能 华为云 12 月 PK 榜

听软件测试自动化“领导者”讲解如何降本、增效与提质

龙智—DevSecOps解决方案

测试 自动化测试 测试自动化

36kr企服点评启发:“信任的基础是真实,只要做到真实,一定能够建立起双向信任”

B Impact

LED透明屏在夜晚经济有怎样的发展机遇

Dylan

LED LED显示屏

喜讯!YMatrix 当选新能源汽车国家大数据联盟理事单位

YMatrix 超融合数据库

数据库 新能源汽车 新能源 超融合数据库 YMatrix

中国敏捷十年实践者分享:敏捷教练的自我修为

华为云开发者联盟

云计算 华为云 12 月 PK 榜

携程商旅CEO张勇:TMC不止一站式解决方案 携程商旅推出“产品云图”

携程商旅

隐藏复杂、抽象概念,「技术无感化」 ——The Future of Database2022 | 黄东旭新番

B Impact

华为云低代码技术:让矿区管理“智变”,一览无遗

华为云开发者联盟

云计算 低代码 华为云 12 月 PK 榜

积分盲盒商城系统开发方案(成熟定制技术)

I8O28578624

Meta Force佛萨奇2.0元宇宙项目系统开发技术讲解方案

I8O28578624

JavaFX技术预览_Java_Charles Humble_InfoQ精选文章