Sun一直走在开源领域的前列,这次的JavaFX是一个构建于Java技术之上完整的运行时环境,可以用来交付到桌面、移动设备、手持设备和电视等环境的富互联网应用(RIA)。在这些里的每一个硬件平台上,这个新技术都提供一个脚本语言,以结合Java的威力用于快速开发有Flash效果和交互式图形用户接口的应用程序。但是这还远不是JavaFX所展示的全部,它还代表了Sun的一个里程碑式新商业策略和一门新前沿技术。InfoQ就此采访了Sun的首席技术官Bob Brewin,他解释了这一技术对Sun、Java开发者以及使用者等这些JavaFX所真正关注的对象的意义。
问到是什么驱动了Sun在这个时候向市场推出这个技术,Brewin没有像常人所想的那样回答说是为了更丰富、更快速开发桌面Web内容的需要,而是表示说JavaFX是对Flash和Ajax增长的一种回应,现在移动手机和电视屏幕比桌面浏览器离用户更近,在他的思想里,这些才是JavaFX最重要的驱动力。这正好印证了Sun在大会上所讲的将注重力放在消费者产品上的观点,这样Sun就有可能为Java技术占领最大范围的市场。Brewin指出,现在世界上大部分人在访问互联网内容时的首要选择不是桌面计算机,而是移动手机。
根据目标硬件平台的不同,JavaFX或者构建在Java SE上或者Java ME上,但是以Mobile的眼光来看,它更像是一个可以制作交互式内容的产品化脚本接口——一个设备上的完整操作系统,包括Linux内核和本地服务等。它应该被看作Windows Mobile、Symbian OS和其他移动Linux平台的竞争对手。在移动手机上运行时,JavaFX Mobile能实现内嵌在大多数移动手机里的电话服务。所以以这个观点来看,你就能明白这一技术和Sun最近从SavaJe处所获技术的关系。Linux 内核和CDC Personal Basis Profile Java runtime的目标是与高级智能手机一个级别的手持设备,以及电视和其他连接设备,但是Brewin说随着运行时的优化和完善,Sun也会将此应用到 CLDC MIDP等“功能手机(Feature Phone)”。因为整个JavaFX软件系列都将会开源,所以Sun期望能通过出售完整的设备平台来增加许可(License)收入,而不仅仅是 Java运行时环境。很多项目都在进行之中,甚至包括Solaris内核这一现在应用在大多数移动设备都有的ARM处理器上的简易操作系统。
问到JavaFX Script的起源,Brewin回答说这个用于脚本化交互式GUI的语言是由Sun工程师Chris Oliver所开发,当时他还在SeeBeyond技术公司(2005年被Sun收购)。很多开发者可能都熟悉它从前的名字——F3。JavaFX Script静态类型化并提供编译时错误检查机制,使得它有可能被用于开发可支持代码完成、超链接、重构等功能的强大工具。其他的语言特性包括类型推断(type-inference)、声明语法,以及完全支持2D图像、标准Swing组件和声明动画的自动数据绑定等。你还可以导入Java类,创建新的 Java对象,调用它们的方法,以及实现Java接口等。
相应的制作工具也在开发之中,但是在大会上Chris展示了一个由他自己开发的可用于JavaFX脚本化的交互式GUI构建器。这个工具包含在 JavaFX面向开发者社区所发布的初始版本里。因为脚本语言和工具在所有的目标平台上都保持一致,所以JavaFX看上去能实现Sun的“一次编写,处处运行”的承诺,甚至比Java自己做的还好。当然,在JavaFX脚本里被导入和调用Java对象会依靠提供的Java运行时。对于为只有有限资源和缺少Swing或者AGUI类库支持的CLDC设备所发布的JavaFX版本而言,它的功能某种程度上肯定会减弱。
桌面JavaFX现在所要考虑的一个问题是部署。对于从前没有安装过JRE的用户来说,JRE体积太大,而且现在从浏览器上进行按需安装的用户体验也不是非凡好。Brewin在演讲中提出了一个可行的解决方案,在Java 6 Update 2里将会为JRE引入一种新型的部署模型,初次下载时体积非常小,只有在需要时才下载其他的JRE组件。他说这个概念非常类似Java 7中提到的Java Kernel项目。被问到类似的部署模型会不会用在Java ME上时,Brewin说当然有可能,这会由Java Community Process来推进。
让他对JavaFX和Adobe Flash做个对比时,Brewin回答说这是一个“苹果和橘子”的比较。Flash有很好的功能,但它永远不能交付Java类库的大部分功能,而 JavaFX可以。他说更好的比较是在JavaFX和Apollo(Adobe将要为桌面RIA提供的一个运行时)之间。在这个擂台上,他认为 JavaFX会非常有竞争力。