借JavaFX之风,Swing终于熬到了出头之日

前几天看了点新闻,一是说JavaFX1.0的推出,二是是说Sun停止了对SwingX的资助,由此激怒了社区。
由此一些人推论Sun已经全力押宝JavaFX,Swing将沦为鸡肋。而后Sun的高管自然出面表态,Swing和JavaFX两手都要硬。

由于本人一直从事企业信息系统的管理和研发,平日对Swing还是多有涉猎,看到这些传闻不免要探个究竟。其实最近忙于管理工作,技术上已多日不熟了。于是下载了NetBeans6.5 JavaFX版,顺便装了个JDK1.6 update11,这一试却是大获惊喜,同时对Sun的JavaFX策略深感怀疑。

惊喜在于经过多年的等待和失望,Swing居然真正快了起来,启动速度几乎提高了一倍以上。这对于Swing的爱好者们无异打了一针鸡血!老实说,Swing一直以来是设计精品、性能垃圾,从Applet时代开始,大家就一直是恨铁不成钢,期待了很多年了,直到期待到绝望。以至于本人怀疑Swing的性能也“只能如此了”。于是大家才会去折腾设计上莫名其妙的Swt,才会毅然决然地把Applet扔到一边,硬啃代码丑陋的Flex。经过多年的批判,很多初学者早已习惯把“Swing很烂”当做公理。其实经过多年发展和实践,Swing的架构设计是超优秀,跨平台也是目前最完善的,“慢”才是Swing的真正硬伤。可惜Sun一直对这个问题视而不见,才导致了这种明珠暗藏的局面。

也许Sun还是要靠买高端的服务器挣钱吧,所以从来对“慢”这个问题相当麻木。以至于众多从Java时代成长起来的程序员已经逐渐习惯了“慢”,甚至找出各种借口说“慢”已经不是问题。结果如何呢,EJB渐成笑柄,而Swing这种超经典GUI(除MS的各大系统级厂商由于要跨平台,故Swing是GUI首选)总是令人不满,根本性的问题其实还是“慢”,这甚至让爱好者都难于启齿。与之相对的是,MS恰恰是最重视“快、慢”问题的,君不见Windows的GUI就是快,MS的软件上手也是快,随之是滚滚而来的钞票。等Vista一“慢”,连MS都不好使了,大家不买帐了。所以对于用户而言,“使用快”永远是个硬道理。其实对于程序员而言,“开发快”也永远是个硬道理,只不过在这方面是相对的,面对不同规模和生命周期的系统,各种技术是难有定论的。几经折腾,笔者还是坚守中庸主义的Java。

这几年RIA之风日渐疯狂,人们早起习惯大谈Flex、Ajax,甚至新出炉的SliverLight,全然忘记了Java起家时的Applet在十多年前早已是RIA的先行者。作为后起之秀的Flex强在哪里,其实最主要是“快”,运行快、安装快、开发快。或许迟钝的Sun终于感到了耻辱,才开始下决心解决这个“慢”的问题。NetBeans的GUI设计器算是解决了开发“慢”的问题,更重要的是JRE update10之后终于可以让爱好者享受一下不输于winform和swt的速度感了。以Swing经典的架构设计、完善的跨平台特性,优秀的可扩展性,笔者实在找不到不用Swing的理由了。以现在而论,针对Internet的JavaFX尚不完善(连NetBeans都不能可视化设计,且标记化的语言实在是够乱的),大家不必胡乱跟风。但企业应用则可以好好考虑一下JApplet或者Swing Application,与其死磕乱糟糟的JS和Flex(对于习惯了Java的程序员来说),不如享受一下All in Java的乐趣。

Swing没有普及不见得是慢的结果。而是其高端性。

也不能说死磕乱糟糟的JS,JS因为开源推动,已经今非昔比,基于构件组件重用基础上,如果你还和JS每一句语句死磕,那只能说明你使用方式有问题,也就是没有掌握模式使用之道。

Java更是这样,如果你当C语言来用,肯定比不过C,而且做死,你换一套思路来做,就能象apache的Hadoop 那样创语言计算最快世界纪录,这些都不能单纯用语言慢快来解释的。

重要的是提高自己,没有一个框架产品解决所有问题,软件更应该是解决方案,而不是具体产品,这是聪明的IBM定位解决方案解决厂商的原因。可惜我们很多人都没有认识到这个软件本质特点。还停留在微软那套,依赖微软那样把产品和方案一起囫囵吞枣塞给你,你就象婴儿一样,不管喂的是什么都吃了,长久以往养成婴儿依赖心理了。

很多人都没有明白自己有这个思维,所以,反思是提升自己的第一步。


JavaFX竞争语言是XUL and XAML,XUL是一种XML UI,很早随着SWING出现,后被Mozilla支持。
http://luxor-xul.sourceforge.net/talk/jug-oct-2001/slides.html

这篇文章中对RIA定义很经典:
Embed HTML Browser
Embed HTTP Server
Embed Template Engine
Embed Portal Engine
Embed XUL Engine
Embed Download/Upload Manager
Themes, Skins and Look & Feels
Zero-Administration (Single-Click Install, Auto Upgrade)

但是目前好像没有一个框架或软件把这些打包在一起。而JavaFX可能就是这样一个终极。

JavaFX本身也是script类似JavaScript,竞争对手是Adobe AIR and Silverlight,我们现在需要的一个RIA是将rich text, graphics, animations, audio 和 video能够集成在一起,象Swing那样非常底层式的RIA开发已经不能满足需要,现在Jme也就是J2ME中Polish框架都做到非常象Struts那样的MVC。

曾经有一段时间认为:SWING是图形界面的楷模,Web表现层应该向SWING学习,于是JSF出现了,但是实际情况是:SWING应该向Web表现层Struts等学习,移动Polish就是好的例子,AJAX蓬勃发展也是一个例子,JavaFX更是SUN转变思路的一个例子。

可惜JavaFX来得太迟,如今浏览器市场已经被Flash和AS3大量占领,所幸因为Flash的不开放性,也就是不透明性,限制了视频和声音在互联网浏览器中深入发展,你不能在一段视频中嵌入广告和关键字等等,不能对视频和声音进行实时加工和处理,不能象对文本那样比如JiveJdon论坛这样输出文字进行层层过滤。

但是我们呼唤处理图形视频就像我们处理文本一样方便的技术。

回到XML SVG图形处理技术上面来,XUL是一个探索方向,如今出了一个ZK= Java + MXML + AJAX
号称Flex的强劲对手,Flex和As3开发太重了,整合了Eclipse的开发工具相当大。
http://www.flex888.com/924/java-mxml-ajax-zk-sun-should-have-done-this.html

[该贴被banq于2009-05-07 12:22修改过]