HTML、Swing還是XML,Java客戶端工具選擇?(二) [轉(zhuǎn)]
發(fā)表時間:2023-07-28 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]基于Swing的GUI客戶端 今天還有多少人在使用Java Applet作為客戶端?也許使用基于HTML的UI更安全,但這是最好的選擇嗎? AT&T的一個業(yè)務部門Telecorp PCS...
基于Swing的GUI客戶端
今天還有多少人在使用Java Applet作為客戶端?也許使用基于HTML的UI更安全,但這是最好的選擇嗎?
AT&T的一個業(yè)務部門Telecorp PCS曾經(jīng)開發(fā)過一個應用程序,使其商店可以收集希望購買移動電話的用戶的資料,檢查其信用卡,然后立即開通移動電話,除了確認用戶輸入的信息外,應用還必須通過使用排序、選擇和其他的標準數(shù)據(jù)庫功能處理提交的報告。此外,當一個新的移動電話開通后,這個應用程序還需要顯示一個通知。
你能相像用HTML來完成這一切嗎?也許可能,但它將非常討厭,而且速度很慢,需要不間斷地使用網(wǎng)絡(luò)連接。Telecorp PCS決定冒險在交互的Applet中使用Java,那么結(jié)果如何呢?完全成功,這一應用程序在開發(fā)時采用了Swing,并布署在采用了Java插件的互聯(lián)網(wǎng)網(wǎng)站上。通過使用Swing UI類,很簡單地完成了應用所要求的功能。
我相信許多開發(fā)人員在早期使用Java時,都使用過applet,并且在解決各種瀏覽器之間的不兼容性、applet下載時間、性能方面花費過大量的時間。對客戶端Java最大的批評來自其對象性,但現(xiàn)在情況已經(jīng)有了很大的改觀。Sun已經(jīng)花費了大量的時間來改進其代碼的質(zhì)量,下面我將向你說明為什么基于Swing的UI是值得一試的。
Swing及其布署模式
我無需對Swing的內(nèi)部架構(gòu)以及類和界面的設(shè)計、設(shè)計模板的實現(xiàn)方面有多少新思想多作敘述了。Swing幾乎是我見過的最徹底的窗體系統(tǒng),它的容器、組件和UI元素之間的關(guān)系非常清晰。Swing的架構(gòu)是基于Model-View-Controller(MVC)設(shè)計模板的,其數(shù)據(jù)與數(shù)據(jù)的表達和處理相互獨立。
大多數(shù)的Swing模型都是由各種UI元素共享的。例如,JTable使用和JList、JTree相同的模型集,這就使得學習和使用Swing非常簡單,而且Command、Observable和Listener等模板提供了很好的靈活性和良好的面向?qū)ο筇匦。也許Swing架構(gòu)中唯一的不足之處是所有的事件都被交付到相同的EventDispatch線程中,使整個GUI客戶端應用程序只有一個線程。但我們可以通過使用不同的線程響應用戶的命令而不通過EventDispatch線程來完成所有操作,就可以很簡單地克服Swing這一缺點。
Sun發(fā)布的每個JDK版本都對Java和Swing的性能都進行了改進。JDK 1.3中與Swing相關(guān)的改進表現(xiàn)在性能、內(nèi)存消耗和一個輸入確認框架。性能和內(nèi)存消耗方面的改進相當可觀。我們公司將客戶端的應用程序由JDK 1.2.2升級到1.3后,內(nèi)存消耗降低了30%,一些應用程序內(nèi)存占用減少得更多。由于Swing內(nèi)部的初始化過程被優(yōu)化了,我們的客戶端應用程序的運行速度和響應速度都更快了。簡而言之,對速度影響最大的是加載其他界面組件時自動產(chǎn)生的大量的類,而這一方案中只包含有一個類。另一個重大的變化是缺省的JVM是HotSpot Client VM,它專門針對GUI繪制和客戶端應用程序執(zhí)行進行了優(yōu)化,可以通過在命令行方式下運行java命令得到缺省的JVM。
輸入確認框可以使我們很方便地通過編程實現(xiàn)命令字段或輸入確認。在這以前,如果要在處理下一個字段之前,對前一個用戶輸入進行處理,必須在該部件上添加一個監(jiān)聽程序,每當該部件不再是焦點后都需要對它進行確認,這種方式非常單調(diào)和乏味。使用新的InputVerifier類,可以通過創(chuàng)建InputVerifier子類的一個實例,并將它賦予需要確認的JComponent,就能達到相同的目的。在焦點轉(zhuǎn)換之前,部件將自動地調(diào)用verify()方法。