跨平台还远远不够
多年来,我一直在努力解决像Hands-On Java CD这类产品的跨平台问题。这与RIA问题是相同的,因为我希望安装过程能够尽可能简单,希望所有功能都能够无缝运转,而且不希望遇到平台问题。
我的解决方案在很多情形下能够生效,但有时客户会给我发电子邮件说,这种方案在他们的计算机上行不通,我不知道问题出在哪里。我能做的最好的事情就是让他“在其他计算机上试试”,而且这常常能解决问题……无论是什么问题。我永远不希望听到这类问题;我只希望所有功能都能够生效。我的主要目标是创建一个slide-and-audio内容交付系统,就像您在Hands-On Java CD ROM或Thinking in C中看到的一样。Java曾经宣称“只需编写一次就能在任何地方运行”,它是一个很有吸引力的竞争者。不幸的是,Linux对它的支持来得太晚了(而且Mac的支持也比较晚)。Linux和Mac用户也许只是少数,但是他们能直言不讳地提出意见。
遗憾的是,Java不支持MP3和多媒体。正如Java Posse的Dick Wall曾经多次指出的,Java Media Framework (JMF)被忽略了许多年。在我最初做决定的时候,没有对任何压缩声音格式的支持(与MP3相比,我更喜欢使用其他格式)。即使到现在,也只有开源软件能够支持MP3,理论上讲很不错,但是我不想对其进行测试并找出平台问题——我希望它能够运行;我惟一希望从客户那里听到的回应是“这太好了!”
似乎惟一能够使用的只有RealPlayer,所以我使用它播放第二版的HOJ CD。但是RealPlayer在安装过程中总是试图让您购买付费版本;我必须告诉人们如何找到免费版本。而且它非常霸道——它取代了MP3,尽管您告诉它不要这么做。
尽管如此,RealPlayer也不可靠。它的安装偶尔会出现问题,我收到了很多这样的电子邮件。我不知道问题的根源,而客户通常会认为是CD出了问题。Daily Show使用RealPlayer多年了,它不但因为总是开始和停止而使人苦恼(所有媒体都不能预先下载,只能在线观看),而且在图片左侧总是存在拖尾。现在Comedy Central已经转变为一个新系统,但这只能间歇性地运行。所以我只能期待它们在YouTube上发布了。
Flash解决方案
所以,这就是我的问题。可能10年之后,Java仍不能够占领RIA领域。可能Ajax只是“JavaScript本来期望的运行方式”,但是浏览器、HTML和CSS的局限性似乎限制了它的发展空间。我们将使用什么来构建RIA?
对于我而言,我只是希望有这样一个系统,它能够解决我的所有 UI问题,而不只是一些问题。如果我打算学习它,我不希望在开始开发时却碰壁了。这种情况已经发生很多次了。显然,惟一的解决方案是Flash。Flash总是与所有跨平台多媒体体验和用户界面相关。人们非常熟悉和喜欢Flash,而且它安装在几乎所有计算机上。它值得信任、稳定而且可靠。
Flash的安装对于每个人来说都非常简单。不需要回答问题或执行特殊操作;它运行良好。这就是为什么它这么流行了。当前和以后的Flash版本都会在3个平台上(是的,除了64-bit Linux,但是正在解决这个问题,而且其用户通常都有不止一台计算机,因此他们还有备选方法)同时发布。标准的Flash安装能够播放MP3和各种视频类型,因此不用担心“编写一次就能在任何地方运行……除了用于多媒体”。
而且不可否认,Flash产生的用户界面非常友好。Flickr和Picasa都使用什么?不是Java、不是Ajax,而是Flash。Google Video是用Ajax编写的,它肯定不能用于所有地方,因为他们购买了使用Flash的YouTube。甚至最顽固的Swing支持者也暗地里希望自己的UI能有这么漂亮,尤其是不需要Swing要求的所有额外工作。
有一个非常不错的Flash web应用程序叫做Gliffy,它效仿了Visio(它是用OpenLaszlo创建的,我将在稍后提及)。没有人能够想到用Ajax创建这样的软件,即使使用HTML、CSS和JavaScript模仿更加简单的Microsoft Paint的人也想不到。非常不错,但是您会认为这已经接近这些技术的功能极限了,而Flash才刚刚开始。除了Paint克隆有点缓慢和笨拙之外,各个浏览器上的UI也不一致。即使在JavaScript和诸如Ajax、JSON、GWT和其他技术的限制内完成了令人惊讶的成就,仍然存在着限制。我们每天都要面对这些限制,但是它们并没有消失。
解决UI问题
GUI编程的一个困难之处在于选择GUI库。有时候有一个标准库,但是不能进行更改。在Java中,我们首先使用AWT,后来证明这是错误的,因此我们不得不忍受开发出来的Swing,直到IBM和Eclipse加入并提供了一个额外选择SWT。在Python中,有许多GUI库,包括内置的Tkinter(它克服了安装问题)、WxPython、Qt等等。特定于Windows的库也有类似的选择,但是如果想要创建跨平台应用程序,这些库都用不了。
如果研究这些GUI库,跟我一样,您需要获取大量不是很深入的知识。每个库都需要花时间学习,每个库都有自己的特点,某些活动在一个库中非常简单,但是在另一个库中只是有可能实现。每个库都用不同的方式看待GUI编程。我宁愿学习一种解决方案,然后用于所有的应用程序。通过这种方法,我就不用学习GUI解决方案,然后开始深入研究。理想情况下,这将会是一个在所有平台上都产生一致结果的真正的编程语言。我相信要解决用户界面问题,需要一种专注于用户体验的特定于域的语言。对于我来说,基于Flash技术(比如Flex)是此问题的最佳解决方案。(我正在安排与Adobe签订一份顾问协议,以帮助他们向大众培训Flex的知识。但是很久以前我就确信Flash,特别是Flex是用户界面问题的最佳解决方案,在Adobe表示对我的帮助感兴趣之前我就开始编写这篇文章了)。
什么是Flex?
一般而言,Flash内容和应用程序是使用Flash着作工具创建的,该工具的当前版本为Flash 8 Professional(这容易混淆,但是在10年前就决定为这个工具赋予与运行时相同的名称了)。还有一个工具称作Macromedia Director,这是一个针对CD-ROM的多媒体制作工具,它比Flash更早,输出一种Shockwave格式的文件,这种文件在一个插件或ActiveX控件中运行,这种控件与Flash内容很相似,却是一个完全不同的控件。Shockwave也有自己的强盛时期,而且一直都被广泛使用,特别是在游戏中;但是Flash比Shockwave更轻量型,而且应用更加广泛。
Flex是一种通过编程开发Flash应用程序的方式。它包括一种叫做MXML的说明性XML语言和一种叫做ActionScript的编程语言,前者用于用户界面布局,后者是ECMAScript 的一个扩展集(也就是标准化的JavaScript),还包括一些额外特性,比如可选的静态类型检查。ActionScript是一种跨多平台运行的语言,因此无需担心各个平台的差异。由于它基于ECMAScript,所以JavaScript知识能够派上用场。所有MXML组件都是用ActionScript编写的,如果想要编写自己的组件,也可以使用它。Flex应用程序被直接编译为SWF(Flash二进制码),然后由Flash运行时进行Just-In-Time (JIT)编译,这可以提升其速度。
成本是最初阻碍我使用Flex的主要考虑因素,主要是因为读者都不愿意或无法支付这些费用。在最早版本的Flex中,必须购买服务器版本才能创建静态SWF。服务器版本是针对动态内容设计的,对于从数据库或类似程序创建动态SWF的大型企业来说,花这些钱当然是值得的。但是对于只想尝试一下Flex的人来说,没有理由花这些钱。如果一般人没有一个合理的实验方法,包括创建静态SWF以从他们自己的服务器交付,那么我将很难推荐Flex。但是,现在您可以下载免费的命令行Flex编译器创建静态SWF,也可以从您的web站点交付这些SWF,无需支付任何费用。编译器、框架和调试器都是免费的,所以没有理由不使用Flex。
收藏地址:http://www.qqread.com/java/2008/03/w400064.html相关专题
- Java环境安装配置 (5667篇文章)
- Java编程开发手册 (8320篇文章)
- 精通Hibernate之映射继承关系(四) (0次浏览)
- 何不将Java与.NET合二为一? (0次浏览)
- Hibernate的JNDI名称绑定分析 (0次浏览)
- 精通Hibernate之映射继承关系(一) (0次浏览)
- 精通Hibernate之映射继承关系(二) (0次浏览)
- 美国计算机教授语出惊人:Java对学生有害 (0次浏览)
- JDK 6 JRE 6 Update 4 (0次浏览)
- 三步教你改善Java代码质量 (0次浏览)
- Java语言入门 简述Java语言回收机制 (0次浏览)
- 2008年Java开发者最迫切的五个期望 (0次浏览)



