JavaFX重裝上陣 加強(qiáng)Web領(lǐng)域開發(fā)
Sun公司的JavaFX是一種腳本,以簡(jiǎn)單的方式利用現(xiàn)有的Java語言、Java 2D和Java Web Start技術(shù)實(shí)現(xiàn)Web富客戶端界面。
很久以前,當(dāng)Internet還很年輕的時(shí)候,Java語言曾經(jīng)很受青睞,以至于《財(cái)富》雜志將Scott McNealy(Sun公司董事會(huì)主席及Sun 聯(lián)邦公司主席,他是Sun公司聯(lián)合創(chuàng)始人)評(píng)為封面人物,以超級(jí)英雄裝扮,冠以“Java Man”的稱號(hào)。Java跨平臺(tái)的能力使得計(jì)算機(jī)世界大為震驚,成為計(jì)算機(jī)世界默認(rèn)的編程語言。
盡管Java在教育、科學(xué)計(jì)算、服務(wù)器領(lǐng)域取得巨大的成功,但是在桌面應(yīng)用程序方面卻沒有那么成功。另外,對(duì)于能夠嵌入在任何Web站點(diǎn)的Java applet來說,是不能和動(dòng)畫流暢、圖形保真度很高的Flash匹敵的。Microsoft曾經(jīng)力推的動(dòng)態(tài)HTML,后來復(fù)興的Ajax,都使得Java applet 在Web領(lǐng)域的優(yōu)勢(shì)逐漸消失。
現(xiàn)在11年過去了,Sun想重新贏回自己的用戶。不過目前看來,這個(gè)任務(wù)變得艱難許多,因?yàn)锳dobe公司不僅有AIR,還有Flex和Flash。單獨(dú)Flash就發(fā)行到第10個(gè)版本了,并且比以前的版本有了更多的功能。這僅僅是一個(gè)Adobe,另外,Microsoft推出的Silverlight,Apple仍舊推動(dòng)QuickTime的發(fā)展,另外AJAX技術(shù)呼聲也不小。它們之間的競(jìng)爭(zhēng)欲演欲烈,誰都想成為占絕對(duì)優(yōu)勢(shì)的技術(shù),滿足對(duì)動(dòng)畫口味要求越來越高的用戶。
Java重裝上陣
Sun現(xiàn)在對(duì)這場(chǎng)戰(zhàn)斗準(zhǔn)備得更好些。Sun現(xiàn)在有豐富的程序庫供動(dòng)畫制作使用,包括很受看中的Java 2D, Java 2D是與Adobe公司一起開發(fā)的,模仿PostScript的計(jì)算結(jié)構(gòu)。有人說在Web動(dòng)畫方面,F(xiàn)lash之所以勝過Java applet是因?yàn)镕lash提供了平滑的反混疊算法。如果Java 2D API不夠的話,會(huì)有大量的開源程序庫開發(fā)出來,供開發(fā)者使用。
現(xiàn)在看來,Sun跟以前相比,對(duì)這場(chǎng)戰(zhàn)斗確實(shí)準(zhǔn)備得好一些,但留給Sun的問題是如何解決新瓶裝舊酒。雖然工具已經(jīng)給Web美工設(shè)計(jì)人員準(zhǔn)備好了,但是Web美工設(shè)計(jì)人員對(duì)如何使用工具卻沒有準(zhǔn)備好。一些Web美工設(shè)計(jì)人員能寫Flash的腳本,但是使用純粹的Java還欠功力。因此Sun需要?jiǎng)?chuàng)建一個(gè)新的語言,并且希望Web開發(fā)者能夠喜歡并且使用新的編譯器將之變成字節(jié)碼,運(yùn)行在Java虛擬機(jī)上。
Sun確實(shí)也推出了新的語言JavaFX,我已經(jīng)花了幾天來試驗(yàn)新的語言,我得出的結(jié)論是JavaFX的成功或者失敗主要取決于用戶的體驗(yàn)。新的語法隱藏了一些Java中討厭的語法限制,***范圍了滿足需求,讓用戶使用起來更加自由,忽略了一些標(biāo)點(diǎn)符號(hào)。關(guān)于顏色和布局的設(shè)計(jì)細(xì)節(jié)混合在代碼中,寫出來的代碼有些像CSS、HTML和JavaScript的混合體。新的語言有許多內(nèi)置的功能來處理最為常見的任務(wù),例如加載遠(yuǎn)程文件。
使用的這個(gè)語言的便利是要付出代價(jià)的:需要學(xué)習(xí)一個(gè)新的語言,記住另一套方式來構(gòu)成一個(gè)Web應(yīng)用程序。老的關(guān)鍵字“void”重新規(guī)定為“Void”,V要大寫,但是這些關(guān)鍵字的定義會(huì)自動(dòng)從函數(shù)中得來,不用顯式的敲出來,這還是很方便的。除此之外,還有一些好的語法。
經(jīng)過一些實(shí)驗(yàn),我發(fā)現(xiàn)對(duì)有些方面受不了。開始問自己為什么Sun不使用Groovy,使用一些簡(jiǎn)潔語言來進(jìn)行Java富Web客戶端程序設(shè)計(jì)?或者使用JavaScript?在瀏覽器中的JavaScript層和JavaFX applet之間有許多靈巧的鉤子?;蛘呤褂迷嫉腏ava?我曾經(jīng)想對(duì)于Java程序員來說,一些本可以拿Java本身表達(dá)的XML或者Properties文件不去表達(dá),而非要掌握一個(gè)新的語言是否是一件明智的事情。
Java Web“混合酒調(diào)制術(shù)”
很快,我逐漸喜歡這種語法。***的好處就是所有的東西都在一個(gè)文件。布局對(duì)象、風(fēng)格、動(dòng)畫效果都混個(gè)在一起。不需要區(qū)分CSS、HTML、JavaScript文件。實(shí)際上將所有的文件混合成一個(gè)文件并不是提倡的,許多機(jī)制鼓勵(lì)程序員將項(xiàng)目細(xì)分成模塊化。
混合是不是一件壞事?一些喜歡嚴(yán)格劃分功能(如模型、視圖、控制)的程序員就覺得此舉簡(jiǎn)直不可理喻。將文件分成不同部分管理起來更加容易。將所有的文件混合在一起,放在一個(gè)JavaFX文件中就不容易將CSS文件給設(shè)計(jì)人員,不容易將JavaScript文件給AJAX程序員。沒錯(cuò),這么認(rèn)為是對(duì)的。但是集成度這么高,利于不同文件的頁面調(diào)度,給一些div一個(gè)id,接著賦予這個(gè)id一些風(fēng)格,設(shè)置id如何動(dòng)作。如果代碼不是那么復(fù)雜,為什么不將他們混合起來呢?對(duì)于設(shè)計(jì)人員來說可以繞開程序員剪切和粘貼足夠的代碼。這么一來進(jìn)行文件的分離并不是什么問題。
這種爭(zhēng)論是不必要的,如果希望的語言有自己的方式來完成分離的工作。程序的皮膚由美工設(shè)計(jì)人員放到CSS文件中,而與此同時(shí)程序員可以專注于腳本的編寫。對(duì)于美工設(shè)計(jì)人員來說,我猜想JavaFX比JavaScript和其它的一些語言更加容易上手。我也肯定有許多關(guān)于如何正確組織應(yīng)用程序的爭(zhēng)論。
Sun花了很大的精力將JavaFX工具加入到NetBean集成開發(fā)環(huán)境中。想要調(diào)查這些平臺(tái)有沒有增加JavaFX最簡(jiǎn)單的方法就是下載NetBean源代碼看看。NetBean集成開發(fā)環(huán)境中也有來自Adobe的Illustrator、Photoshop和 Flash的插件,這些插件能制作圖形。我認(rèn)為存在這么一種可能:某個(gè)勇于嘗試的美工設(shè)計(jì)人員在NetBeans中隨心所欲選用自己喜歡的工具進(jìn)行創(chuàng)作,在NetBeans創(chuàng)建出一件形態(tài)優(yōu)美的作品來。但是對(duì)于一般的美工設(shè)計(jì)人員來說,他們還是需要一些幫助的,因?yàn)镴avaFX的語法中有許多的選項(xiàng),這些選項(xiàng)無處不在,還是有些令人費(fèi)解。只有程序員才能想出將if-then語句加入到一個(gè)字符串的定義,如:
var s="The world is {if (date>1492) "round" else "flat"}."; |
令人滿意的結(jié)果是我們能夠丟掉打括弧中Java的if-then語法,因?yàn)槲覀兡軌驅(qū)⑵溆玫狡渌胤健?/P>
美工設(shè)計(jì)人員不需要面對(duì)這些復(fù)雜的語法,因?yàn)橛媚切┖?jiǎn)單的語法就能足夠做許多的事情了。他們不需要思考字符串定義中的這些令人費(fèi)解的事情。
Param Singh,JavaFX的高級(jí)市場(chǎng)經(jīng)理,告訴我說Sun希望JavaFX的早期使用者是那些Java開發(fā)者和一些嫻熟的美工設(shè)計(jì)人員。
Singh 說為美工設(shè)計(jì)人員準(zhǔn)備的可視化工具,以及為移動(dòng)手機(jī)開發(fā)JavaFX應(yīng)用程序的工具不久將會(huì)一起發(fā)布,之后接著說某種IDE里肯定會(huì)有那些工具,因此也需要熟悉這種IDE。”
我在想這些工具也將是免費(fèi)的,或者至少比Adobe的工具便宜很多。程序員將從開源革命中收益,并且有大量的免費(fèi)工具可供使用。如果JavaFX比Adobe的工具便宜很多,那么有可能夠吸年輕的開發(fā)者。
我不知道這是否能足以讓JavaFX從Flash,AIR和其它的工具中爭(zhēng)取到大的市場(chǎng)份額。程序員有他們自己的嗜好。無論如何,但是此舉可以讓Java程序開發(fā)者做一些新的任務(wù),因此就能讓Java有更大的使用范圍。有編寫大量Java代碼的程序開發(fā)者將能夠更輕松的掌握J(rèn)avaFX.
Java如何應(yīng)對(duì)老對(duì)手
我認(rèn)為最常見的JavaFX用戶將會(huì)是科學(xué)和金融方面的程序員,他們需要使得系統(tǒng)界面變得漂亮。任何Java函數(shù)庫都能夠被集成到JavaFX應(yīng)用程序中去,這就使得在應(yīng)用程序在擁有美觀的圖形界面后,還擁有一個(gè)非常靈巧,具有多種計(jì)算功能的后臺(tái)。我不能想象這種應(yīng)用程序如何用Flash的ActionScript來完成。目前對(duì)于開發(fā)者來說,目前這些工具還不具備完成大的項(xiàng)目的需求。
JavaFX真正的用途將還可以是作為更好的部署選擇。舉個(gè)例子,有一個(gè)程序員展示了如何整合JavaFX代碼到拖拽模型中。這些代碼將會(huì)通過Java的Web Start直接部署。對(duì)于一個(gè)公司來會(huì)所,JavaFX是一個(gè)非常好的部署模型,一個(gè)免費(fèi)的開源項(xiàng)目。JavaFX能夠很好的取代Swing,給Java開發(fā)者一個(gè)機(jī)遇來構(gòu)建自己用戶界面,使用去來像HTML的組件那樣,而不去使用Swing。JavaFX不僅僅是讓W(xué)eb頁面更具動(dòng)畫效果,也是部署桌面應(yīng)用程序的好機(jī)制。
我認(rèn)為美工設(shè)計(jì)人員將也會(huì)滿意Sun公司這些年對(duì)Java所做的工作。Java虛擬機(jī)更新非???,由于服務(wù)器端安裝的需求,在服務(wù)器端的安裝同時(shí)由一個(gè)鼠標(biāo)形狀變成一個(gè)沙漏,更具人性化。Java庫函數(shù)也很豐富,并且很好的檢查了,防止有安全漏洞隱患。另外,***的Java虛擬機(jī)已經(jīng)在8億用戶的電腦上安裝了。使用JavaFX的大環(huán)境已經(jīng)具備了。
但是,要想推廣起來或許不是一件容易的事情。Adobe已經(jīng)為Flash和AIR開發(fā)了很好的工具,但是為打造這些工具也花了重金。JavaFX或許能吸引一些年輕的,費(fèi)用不是很充足的美工設(shè)計(jì)人員來使用,因?yàn)樗麄儧]有錢去購買Adobe的軟件套。
不過想要阻止JavaFX的成功還是會(huì)有一些困難的。至于說將來會(huì)不會(huì)取代Flash,Silverlight或者其它的技術(shù)呢?至少不是現(xiàn)在的事情。但是瘦死的駱駝的馬大,雖說Java 目前在界面和分布方法欠改進(jìn),但JavaFX還是會(huì)贏得一些忠實(shí)的粉絲和一席之地的,這就會(huì)讓Java在桌面應(yīng)用程序取得立足之地。
【編輯推薦】