JavaFX重装上阵 加强Web领域开发

Sun公司的JavaFX是一种脚本,以简单的方式利用现有的Java语言、Java 2D和Java Web Start技术实现Web富客户端界面。

很久以前,当Internet还很年轻的时候,Java语言曾经很受青睐,以至于《财富》杂志将Scott McNealy(Sun公司董事会主席及Sun 联邦公司主席,他是Sun公司联合创始人)评为封面人物,以超级英雄装扮,冠以“Java Man”的称号。Java跨平台的能力使得计算机世界大为震惊,成为计算机世界默认的编程语言。

尽管Java在教育、科学计算、服务器领域取得巨大的成功,但是在桌面应用程序方面却没有那么成功。另外,对于能够嵌入在任何Web站点的Java applet来说,是不能和动画流畅、图形保真度很高的Flash匹敌的。Microsoft曾经力推的动态HTML,后来复兴的Ajax,都使得Java applet 在Web领域的优势逐渐消失。

现在11年过去了,Sun想重新赢回自己的用户。不过目前看来,这个任务变得艰难许多,因为Adobe公司不仅有AIR,还有Flex和Flash。单独Flash就发行到第10个版本了,并且比以前的版本有了更多的功能。这仅仅是一个Adobe,另外,Microsoft推出的Silverlight,Apple仍旧推动QuickTime的发展,另外AJAX技术呼声也不小。它们之间的竞争欲演欲烈,谁都想成为占绝对优势的技术,满足对动画口味要求越来越高的用户。

Java重装上阵

Sun现在对这场战斗准备得更好些。Sun现在有丰富的程序库供动画制作使用,包括很受看中的Java 2D, Java 2D是与Adobe公司一起开发的,模仿PostScript的计算结构。有人说在Web动画方面,Flash之所以胜过Java applet是因为Flash提供了平滑的反混叠算法。如果Java 2D API不够的话,会有大量的开源程序库开发出来,供开发者使用。

现在看来,Sun跟以前相比,对这场战斗确实准备得好一些,但留给Sun的问题是如何解决新瓶装旧酒。虽然工具已经给Web美工设计人员准备好了,但是Web美工设计人员对如何使用工具却没有准备好。一些Web美工设计人员能写Flash的脚本,但是使用纯粹的Java还欠功力。因此Sun需要创建一个新的语言,并且希望Web开发者能够喜欢并且使用新的编译器将之变成字节码,运行在Java虚拟机上。

Sun确实也推出了新的语言JavaFX,我已经花了几天来试验新的语言,我得出的结论是JavaFX的成功或者失败主要取决于用户的体验。新的语法隐藏了一些Java中讨厌的语法限制,最大范围了满足需求,让用户使用起来更加自由,忽略了一些标点符号。关于颜色和布局的设计细节混合在代码中,写出来的代码有些像CSS、HTML和JavaScript的混合体。新的语言有许多内置的功能来处理最为常见的任务,例如加载远程文件。

使用的这个语言的便利是要付出代价的:需要学习一个新的语言,记住另一套方式来构成一个Web应用程序。老的关键字“void”重新规定为“Void”,V要大写,但是这些关键字的定义会自动从函数中得来,不用显式的敲出来,这还是很方便的。除此之外,还有一些好的语法。

经过一些实验,我发现对有些方面受不了。开始问自己为什么Sun不使用Groovy,使用一些简洁语言来进行Java富Web客户端程序设计?或者使用JavaScript?在浏览器中的JavaScript层和JavaFX applet之间有许多灵巧的钩子。或者使用原始的Java?我曾经想对于Java程序员来说,一些本可以拿Java本身表达的XML或者Properties文件不去表达,而非要掌握一个新的语言是否是一件明智的事情。

Java Web“混合酒调制术”

很快,我逐渐喜欢这种语法。最大的好处就是所有的东西都在一个文件。布局对象、风格、动画效果都混个在一起。不需要区分CSS、HTML、JavaScript文件。实际上将所有的文件混合成一个文件并不是提倡的,许多机制鼓励程序员将项目细分成模块化。

混合是不是一件坏事?一些喜欢严格划分功能(如模型、视图、控制)的程序员就觉得此举简直不可理喻。将文件分成不同部分管理起来更加容易。将所有的文件混合在一起,放在一个JavaFX文件中就不容易将CSS文件给设计人员,不容易将JavaScript文件给AJAX程序员。没错,这么认为是对的。但是集成度这么高,利于不同文件的页面调度,给一些div一个id,接着赋予这个id一些风格,设置id如何动作。如果代码不是那么复杂,为什么不将他们混合起来呢?对于设计人员来说可以绕开程序员剪切和粘贴足够的代码。这么一来进行文件的分离并不是什么问题。

这种争论是不必要的,如果希望的语言有自己的方式来完成分离的工作。程序的皮肤由美工设计人员放到CSS文件中,而与此同时程序员可以专注于脚本的编写。对于美工设计人员来说,我猜想JavaFX比JavaScript和其它的一些语言更加容易上手。我也肯定有许多关于如何正确组织应用程序的争论。

Sun花了很大的精力将JavaFX工具加入到NetBean集成开发环境中。想要调查这些平台有没有增加JavaFX最简单的方法就是下载NetBean源代码看看。NetBean集成开发环境中也有来自Adobe的Illustrator、Photoshop和 Flash的插件,这些插件能制作图形。我认为存在这么一种可能:某个勇于尝试的美工设计人员在NetBeans中随心所欲选用自己喜欢的工具进行创作,在NetBeans创建出一件形态优美的作品来。但是对于一般的美工设计人员来说,他们还是需要一些帮助的,因为JavaFX的语法中有许多的选项,这些选项无处不在,还是有些令人费解。只有程序员才能想出将if-then语句加入到一个字符串的定义,如:

var s="The world is {if (date>1492) "round" else "flat"}.";

令人满意的结果是我们能够丢掉打括弧中Java的if-then语法,因为我们能够将其用到其它地方。

美工设计人员不需要面对这些复杂的语法,因为用那些简单的语法就能足够做许多的事情了。他们不需要思考字符串定义中的这些令人费解的事情。

Param Singh,JavaFX的高级市场经理,告诉我说Sun希望JavaFX的早期使用者是那些Java开发者和一些娴熟的美工设计人员。

Singh 说为美工设计人员准备的可视化工具,以及为移动手机开发JavaFX应用程序的工具不久将会一起发布,之后接着说某种IDE里肯定会有那些工具,因此也需要熟悉这种IDE。”

我在想这些工具也将是免费的,或者至少比Adobe的工具便宜很多。程序员将从开源革命中收益,并且有大量的免费工具可供使用。如果JavaFX比Adobe的工具便宜很多,那么有可能够吸年轻的开发者。

我不知道这是否能足以让JavaFX从Flash,AIR和其它的工具中争取到大的市场份额。程序员有他们自己的嗜好。无论如何,但是此举可以让Java程序开发者做一些新的任务,因此就能让Java有更大的使用范围。有编写大量Java代码的程序开发者将能够更轻松的掌握JavaFX.

Java如何应对老对手

我认为最常见的JavaFX用户将会是科学和金融方面的程序员,他们需要使得系统界面变得漂亮。任何Java函数库都能够被集成到JavaFX应用程序中去,这就使得在应用程序在拥有美观的图形界面后,还拥有一个非常灵巧,具有多种计算功能的后台。我不能想象这种应用程序如何用Flash的ActionScript来完成。目前对于开发者来说,目前这些工具还不具备完成大的项目的需求。

JavaFX真正的用途将还可以是作为更好的部署选择。举个例子,有一个程序员展示了如何整合JavaFX代码到拖拽模型中。这些代码将会通过Java的Web Start直接部署。对于一个公司来会所,JavaFX是一个非常好的部署模型,一个免费的开源项目。JavaFX能够很好的取代Swing,给Java开发者一个机遇来构建自己用户界面,使用去来像HTML的组件那样,而不去使用Swing。JavaFX不仅仅是让Web页面更具动画效果,也是部署桌面应用程序的好机制。

我认为美工设计人员将也会满意Sun公司这些年对Java所做的工作。Java虚拟机更新非常快,由于服务器端安装的需求,在服务器端的安装同时由一个鼠标形状变成一个沙漏,更具人性化。Java库函数也很丰富,并且很好的检查了,防止有安全漏洞隐患。另外,最新的Java虚拟机已经在8亿用户的电脑上安装了。使用JavaFX的大环境已经具备了。

相关推荐