QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

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

关注

评论

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

设计模式之模板方法模式

越长大越悲伤

设计模式

深度理解:Redis Hash(散列表)实现原理

Java你猿哥

redis 开源 ssm hash 散列表

解锁人机交互新技术 华为开发者联创日·全栈AI黑客松大赛等你来

说山水

一次错误的解码处理导致Netty堆外内存泄漏问题的分析

Java你猿哥

Java Netty ssm RSS 逻辑

Generative AI 新世界 | 走进文生图(Text-to-Image)领域

亚马逊云科技 (Amazon Web Services)

自然语言处理 机器学习 开源

英特尔锐炫实力出击,游戏、内容创作双管齐下!

E科讯

【1对1咨询】土木女生,挖掘个人优势转行程序员

程序员晚枫

程序员 求职 转行

使用 Node.js、Socket.IO 和 GPT-4 构建 AI 聊天机器人

devpoint

node.js websocket GPT-4

如何科学地利用MTTR优化软件交付流程?

SEAL安全

DevOps MTTR 企业号 5 月 PK 榜

可逆计算理论中的Delta合并算法

canonical

5月书讯 | 《这就是ChatGPT》来了!

图灵教育

数学 书单 GPT

Django笔记三十八之发送邮件

Hunter熊

Python django 发送邮件

基于WebGPU的AI原生3D引擎迎来新机遇!Orillusion在GOTC上演讲!

Orillusion

开源 渲染引擎 元宇宙 webgpu AIGC

前端开发如何更好的避免样式冲突?级联层(CSS@layer)

vivo互联网技术

CSS 级联 @layer

4 种 MySQL 同步 ES 方案,yyds!

Java你猿哥

Java MySQL sql elasticsearch Binlog

为什么要用线程池?

javacn.site

硬核!阿里2023版Spring全家桶进阶笔记流出,堪称Java跳槽神器

Java你猿哥

spring Spring Boot spring security Spring全家桶 Spring Cloud Aliababa

GitHub上开源24小时获星96K的,从零到实战Java架构师成长手册

Java你猿哥

架构 架构师 高可用架构 高性能架构 高可扩展

GitHub发布即百万!字节内网超实用 java性能优化手册,star超十万

Java你猿哥

Java ssm jvm调优 Java性能优化

创建矢量图形:Patternodes 3 免激活版

真大的脸盆

Mac Mac 软件 矢量图形创作 创建矢量图形

引领下一代云计算技术的变革:无服务器架构

xfgg

云计算 severless

阿里架构组分布式架构技术使用心得:全在这一份文档里面了

Java你猿哥

架构 分布式 ssm 分布式架构 安全架构

TiDB x Bolt丨超强可扩展性与弹性助力超 1 亿用户畅享出行服务

PingCAP

MySQL 数据库 TiDB

不止游戏!英特尔锐炫“天生爱创作”

E科讯

文心一言 VS 讯飞星火 VS chatgpt (25)-- 算法导论4.2 7题

福大大架构师每日一题

福大大 ChatGPT 文心一言 讯飞星火

量子程序设计基础 | 从经典计算到量子计算

TiAmo

量子计算 经典计算

华为云UniXcoder-VESO-v1问鼎CodeXGLUE榜单第一名

华为云PaaS服务小智

算法 代码 华为云 代码语义

2023-05-29:给你一个由 n 个正整数组成的数组 nums 你可以对数组的任意元素执行任意次数的两类操作 如果元素是 偶数 ,除以 2 例如,如果数组是 [1,2,3,4] 那么你可以对最后一

福大大架构师每日一题

golang 算法 rust 福大大

2023数博会丨软通智慧发布“一屏统揽”TongView 数字政府慧治平台解决方案

说山水

一块显存为 12GB 的 GPU 卡能够在CST 时域求解器仿真的最大网格数是多少?

思茂信息

cst cst使用教程 cst操作 cst电磁仿真 cst仿真软件

刚入职的后端开发问我SpringBoot如何跨域配置?我表示

Java你猿哥

Java Spring Boot ssm 跨域

JavaFX技术预览_Java_Charles Humble_InfoQ精选文章