写点什么

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:354824
用户头像

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

关注

评论

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

BSN IPFS(星际文件系统)专网简介、功能、架构及特性、接入说明

BSN研习社

BSN 分布式存储,

AOP切入点表达式及五种通知类型解析

王小凡

公共数据如何兼顾开放利用和隐私安全合规?

Jessica@数牍

数据安全 隐私计算 公共数据开放 数据开放和利用

导数、微分、偏导数、全微分、方向导数、梯度的定义与关系

矛始

高数 导数 微分

Java 将OFD转换为PDF

在下毛毛雨

Java PDF OFD 格式转换

大咖说·图书分享 | 精益产品开发:原则、方法与实施

大咖说

产品开发 落地方法

共议公共数据开放,“数牍方案”亮相数字中国建设峰会

Jessica@数牍

隐私计算 数牍科技 公共数据开放

如何通过ETL调度工具 TASKCTL 使用作业插件类型调用 kettle作业?

敏捷调度TASKCTL

数据仓库 kettle ETL #运维 TASKCTL

spark-streaming状态流之mapWithState

矛始

spark 状态流

技术风向标 | 云原生技术架构成熟度模型解读

阿里巴巴云原生

阿里云 云原生 成熟度模型

担心 GitHub?那就试试极狐GitLab 吧

极狐GitLab

git GitHub 开源 DevOps gitlab

DevSecOps,让速度和安全兼顾

飞算JavaAI开发助手

实践GoF的23种设计模式:观察者模式

华为云开发者联盟

Web 设计模式 开发 GoF

什么是传输层协议TCP/UDP???

C++后台开发

TCP 网络协议 udp 后端开发 C/C++开发

双屏协作效率翻倍 灵耀X双屏Pro引领双屏科技新潮流

科技热闻

Qakbot新型感染链:使用Windows7系统侧加载感染设备

郑州埃文科技

dll Windows7 Qakbot

netty入门之服务端启动过程分析

Hex

Java 后端 Netty

如何借助自动化工具落地DevOps|含低代码与DevOps应用实践

云智慧AIOps社区

开源 DevOps 低代码平台 开发与运维

智能家居行业发展,密切关注边缘计算和小程序容器技术

Speedoooo

智能设备 边缘计算 智能家居 小程序容器

带你熟悉云网络的“电话簿”:DNS

华为云开发者联盟

云计算 后端 IP DNS 局域网

兆骑科创高端人才项目引进落地,双创大赛承办,线上直播路演

兆骑科创凤阁

双创大赛承办

一文搞懂│XSS攻击、SQL注入、CSRF攻击、DDOS攻击、DNS劫持

网络安全 经验分享 签约计划第三季

1对1直播源码——1对1语音聊天源码

开源直播系统源码

直播系统源码 语音聊天系统软件开发 一对一语音聊天软件

研发效能的道与术 - 道篇

FreeW

架构 研发效能

一文详解 Redis 中 BigKey、HotKey 的发现与处理

冉然学Java

Java redis 微服务 bigkey HotKey

我们被一个 kong 的性能 bug 折腾了一个通宵

尔达Erda

程序员 运维 云原生 性能 bug

TDengine 落地协鑫能科,数百亿数据压缩至 600GB

TDengine

数据库 tdengine 时序数据库

使用python玩转文字类视频

技能实验室

签约计划第三季

大型仿人机器人整机构型研究与应用

优必选科技

机器人

超越 Nginx!号称下一代 Web 服务器,用起来够优雅

冉然学Java

Java nginx GitHub 服务器 Web、

次轮Okaleido Tiger即将登录Binance NFT,引发社区热议

西柚子

JavaFX技术预览_Java_Charles Humble_InfoQ精选文章