在學習Java編程語言的細節和語法時,我們會碰到這樣一個問題:開發桌面應用軟件需要使用哪些Java技術,應當引入哪些package?這一問題的答案取決於開發的應用軟件類型和它的作用。
這篇文章面向初學Java技術的開發人員,它描述了開發不同類型的桌面應用軟件涉及的技術,以及何時決定使用它們。以後的文章將詳細闡述如何使用這些技術,以及如何聯合使用它們。首先,我們將開始在這篇文章中學習部分技術。
要使用這篇文章中的任何技術,我們必須在計算機上安裝Java平台。
桌面應用軟件的類型、外觀、功能
在學習大量的Java技術前,我們必須搞清楚誰會使用我們的應用軟件、他們如何使用它、它在個人電腦還是在網絡上運行,以及應用軟件采用什麼樣的外觀或圖形用戶界面(GUI)?
在開發應用軟件前,考慮下面5個方面:
·應用軟件的發布
·是否采用GUI
·應用軟件的功能
·應用軟件的部署
·其它Java技術
應用軟件的發布
首先,我們必須確定我們的應用軟件是否是分布式軟件。分布式應用軟件運行在多台計算機上,並通過一個網絡通訊。一些分布式應用軟件是二個獨立的軟件:後端服務器軟件和前端客戶端軟件。後端軟件運行在Solaris或Linux等共享系統上,管理磁盤、打印機、調制解調器等共享資源。後端軟件包含有應用軟件主要的處理能力;前端客戶端軟件運行在工作站或個人電腦上,它是用戶在使用應用軟件時能夠看到的部分。前端客戶端軟件處理用戶界面功能,例如接收鍵盤的輸入、在顯示屏上顯示輸出。
分布式應用軟件可以非常簡單,只在一台客戶端計算機和一台服務器上運行;也可以很復雜,在多台客戶端和服務器上運行。非分布式應用軟件在本地計算機上運行,無需訪問網絡。例如,我們可以編寫一個只在本地機上運行的簡單的計算器軟件,我們也可以使這類軟件成為分布式軟件。
通常,我們開發的應用軟件都是分布式軟件,在網絡或互聯網上運行,供許多計算機使用。
要開發分布式應用軟件,我們需要學習和使用Java Remote Method Invocation(Java RMI),遠程Java對象的方法可以被其它Java虛擬機(JVM)調用。Java RMI利用對象序列化對參數進行序列化和反序列化,它不會截斷類型,支持真正的面向對象的多態性。
下面是實現Java RMI需要用到的一些package:
·Java.rmi
·Java.rmi.activation
·Java.rmi.dgc
·Java.rmi.registry
·Java.rmi.server
注意,下面的package名字是以"javax"而非"Java"開頭的:
·Javax.rmi
·Javax.rmi.CORBA
·Javax.rmi.ssl
是否采用GUI
應用軟件通常包含有許多具有不同功能的微型軟件。一些微型軟件有圖形用戶界面(GUI)━━可能只是一個簡單的窗口或對話框,許多微型軟件沒有GUI。但是,應用軟件本身可能有一個主GUI━━包含有菜單、按鈕、工具條、文本框、其它圖形功能。GUI主要用於用戶輸入━━無論用戶點擊一個按鈕或輸入信息,GUI也可以向用戶提供更多的信息。另外,GUI組件也可以向用戶顯示系統返回的信息。
要創建GUI,我們需要使用Java Foundation Classes/Swing(JFC/Swing)和Abstract Window Toolkit(AWT)API。那些package中的許多類和界面使我們能夠方便地創建按鈕、check-box對象、文本框、其它組件,以及組織它們的組件。
創建應用軟件的框架和所有GUI組件最為簡單的方式是使用NetBeans IDE等集成開發環境(IDE)。該IDE使我們能夠拖放組件,由它為我們編寫復雜的組件代碼。學習使用它非常容易,能夠為我們節約大量的時間。但是,所有開發人員必須理解JFC/Swing和AWT的工作原理,因此我們必須親手進行足夠的實踐,理解這些概念。
編寫GUI軟件使用的主要Package
面向AWT
·Java.applet
·Java.awt
·Java.awt.color
·Java.awt.datatransfer
·Java.awt.dnd
·Java.awt.event
·Java.awt.font
·Java.awt.geom
·Java.awt.im
·Java.awt.im.spi
·Java.awt.image
·Java.awt.image.renderable
·Java.awt.print
面向JFC/Swing
·Javax.swing
·Javax.swing.border
·Javax.swing.colorchooser
·Javax.swing.event
·Javax.swing.filechooser
·Javax.swing.plaf
·Javax.swing.plaf.basic
·Javax.swing.plaf.metal
·Javax.swing.plaf.multi
·Javax.swing.plaf.synth
·Javax.swing.table
·Javax.swing.text
·Javax.swing.text.Html
·Javax.swing.text.Html.parser
·Javax.swing.text.rtf
·Javax.swing.tree
·Javax.swing.undo
當然,我們無需引入所有這些package,只需引入我們使用的package即可。 如果我們使用NetBeans IDE,就會發現,在我們使用JFC/Swing或AWT組件時,它就會在代碼中創建引入語句。僅僅從它們的名字中,我們就可以很好地理解這些 package的作用。
應用軟件的功能
這篇文章不可能討論我們在應用軟件中使用的所有功能,但一些功能對於許多或大多數應用軟件而言是通用的。
要使GUI中的按鈕、菜單、文本框完成一些功能,我們需要理解事件處理機制。事件處理程序(event handler)是一個類,包含有當用戶點擊一個按鈕或選擇一個菜單時會執行的指令。事件處理程序可以執行許多操作,應用軟件可以在GUI中顯示反饋信息、在文件或數據庫中寫入數據、進行數學運算、顯示結果,或者完成一些簡單的操作,例如打開一個對話框供用戶輸入更多的信息。
讀寫數據
將用戶輸入的信息寫入一個文件系統,以及在GUI中顯示從文件中讀取的數據,是應用軟件中常見的操作。例如,用戶可以在一個GUI表單中輸入姓名、地址、電話號碼,在服務器上注冊軟件。處理這些數據的一種方式是讓應用軟件將數據寫入到主機或服務器的一個文件中。
Java.io package通過數據流、序列化、文件系統提供系統輸入/輸出(I/O)。一個I/O流代表著一個輸入源或一個輸出目標。流可以代表許多不同類型的源或目標,包括磁盤文件、設備、其它軟件、內存數組。流支持許多不同種類的數據,包括字節、簡單的數據類型、本地化字母、對象。一些流只是簡單地傳輸數據,另外一些類則處理和轉換數據。
無論內部工作原理如何,對於使用它們的軟件而言,所有的流都是相同的簡單模式。一個流就是一個數據序列。在Java.io package中被使用得比較多的二個類是FileInputStream和FileOutputStream,這二者都創建與文件相連的字節流。
存儲數據的一種常用方法是使用數據庫管理系統。要在軟件中編寫向數據庫寫數據、然後獲得結果的軟件代碼,我們就需要學習使用JDBC API,JDBC API提供Java編程語言統一的數據訪問方法,使我們能夠訪問幾乎所有數據源━━從關系數據庫到電子表格,再到普通文件。JDBC技術還提供了用於開發工具和其它接口的通用代碼。
JDBC API支持數據庫訪問的二層和三層模式
在二層模式中, Java applet或應用軟件直接與數據源通訊。這種方法要求能夠與應用軟件訪問的特定數據源直接通訊的JDBC驅動程序。用戶的命令被傳輸給數據庫或其它數據源,這些命令的結果會被返送給用戶。數據源可能位於用戶通過網絡連接的其它計算機上,這被稱為是客戶機-服務器配置:用戶的計算機是客戶機,托管有數據源的計算機則是服務器。而網絡則可能是一家公司的內聯網或互聯網。
在三層模式中,應用軟件將命令發送給中間層,中間層再將命令發送給數據源。在處理命令後,數據源將結果返回給中間層,中間層會將結果返回給用戶。管理信息系統(MIS)主管發現三層模式非常有吸引力,因為中間層使得對數據存取和更新的控制成為可能。三層模式的另一個好處是它能夠簡化應用軟件的部署。例如,數據可以在數據庫中被修改、在不影響用戶體驗的情況下增添新組件。最後,在許多情況下,三層架構具有性能優勢,因為多重事務的效率會更高。
在編寫利用JDBC API存取數據庫的軟件時,我們需要使用下面的組件:
·Java.sql package中的類和界面
·Java DB數據庫等數據庫管理系統
·使用的數據庫管理系統的驅動程序
執行計算和管理數據
我們可能需要編寫大量的代碼,由於必須輸入所有的Java代碼,我們應當熟練使用Java.lang package。
我們應當理解java.lang package中的字符串,字符串在Java編程中被廣泛使用。與StringBuilder類一樣,String類用於創建和處理字符串。
我們還應當熟練使用java.lang package中的Number類、及其子類,它使我們能夠使用這些類的實例,而不是簡單的數字類型。PrintStream和 DecimalFormat類提供了"寫"格式化的數字輸出的方法。最後,Math類提供的數學函數補充了Java語言中的數學運算符,它提供了面向三角函數、指數函數等函數的方法。
為了處理各種類型的數據,我們需要學習collections framework━━表示和處理collections的統一架構。Collection有時也被稱作container,是將多個元素組合進一個單元的對象。Collections被用來存儲、訪問、處理、傳輸聚合數據。通常情況下,collection表示組成一個合乎自然規律的群體的數據項,例如一迭卡片、一個郵件文件夾、一個字母集、電話號碼簿。
圖1顯示的是collection framework,以及Java.util package中常用的界面
圖1: Collection Framework 和Java.util Package中的一些界面
核心的Collection界面是collections framework的基礎。Set是一種特殊類型的 Collection,SortedSet是一種特殊類型的Set,等等。需要注意的是,一個層包含有二棵截然不同的樹。盡管使用方式與collection 相似,Map並非真正的Collection。Map界面提供有3個collection視圖,使Map的內容能夠被看作一系列的鍵、值的集合、鍵-值映射集合。
並發
應用軟件通常一次完成多個任務。例如,流式音頻應用軟件必須同時從網絡上讀取數字音頻內容、解密、播放,並更新對用戶顯示的內容; 無論排版或更新顯示內容的任務多麼繁忙,字處理軟件應當隨時響應鍵盤和鼠標事件。這種能夠同時完成數種任務的軟件就是並發軟件。
Java.util.concurrent package提供基本的並發支持。
錯誤處理
Java語言使用異常處理錯誤和其它意外事件。異常是指在軟件運行期間、破壞了軟件指令正常流程的事件。當一個方法中出現錯誤時,方法會創建一個對象,將它提交給運行時間庫系統。該對象被稱作異常對象,包含有相關錯誤的信息,其中包括類型、錯誤發生時軟件的狀態。 創建一個異常對象,並將它提交給運行時間庫系統就被稱作是"拋出異常"。
要在應用軟件中處理異常,我們需要理解如何編寫代碼,使應用軟件能夠拋出或捕捉一個異常。
應用軟件的部署
當希望應用軟件在浏覽器中運行,或應用軟件與web網頁內容緊密集成時,使用Java插件技術部署applet。如果希望應用軟件在桌面上運行,就使用Java Web Start技術。
Java Web Start技術要求應用軟件被封裝為Java Archive(JAR)文件。JAR文件格式使我們能夠將多個文件整合到一個存檔文件中。通常,一個JAR文件包含類文件、與applet和應用軟件相關的輔助性資源文件。
JAR文件采用了ZIP文件格式,因此我們能夠用它完成無損數據壓縮、存檔、解壓縮、文檔解包等任務。這些都是JAR文件最常見的用途,通過只使用這些最基本的功能,我們就能夠發現JAR文件的許多優點。
如果想利用JAR文件格式提供的電子簽名等先進功能,我們需要首先熟悉基本操作。要利用JAR文件完成基本任務,我們需要使用Java Development Kit(JDK)提供的JAR工具。
一旦應用軟件被封裝為JAR文件,我們就可以使用Java Web Start技術部署應用軟件了。Java Web Start提供了點擊一下鼠標啟動全功能應用軟件的能力。用戶可以下載和啟動應用軟件━━例如一個完整的電子表格軟件或互聯網聊天客戶端,而無需經過復雜的安裝過程。
使用Java Web Start軟件,通過點擊web網頁中的一個鏈接,用戶就能夠啟動基於Java技術的應用軟件。該鏈接指向一個Java Network Launching Protocol(JNLP)文件,它指示Java Web Start軟件下載、緩沖、運行應用軟件。
其它Java技術
這一部分將討論我們應當考慮的其它Java技術。
應用軟件安全
大多數開發人員非常擔心應用軟件的安全性,Java技術有助於從多個方面解決這種擔心。Java技術包含有大量的API、工具,以及常用安全算法、機制、協議的實現。Java平台安全性涉及許多領域,其中包括密碼、公鑰架構、安全通訊、認證、訪問控制。Java安全技術為我們提供了完整的應用軟件安全框架,也為用戶或系統管理員提供了一系列安全地管理應用軟件所需要的工具。
安全Package和類過多,我們在這裡無法一一列出,但一些優秀的資源使我們能夠開始學習與Java應用軟件的安全有關的知識。
全屏獨占模式API
如果在應用軟件中需要高性能圖形━━例如游戲、幻燈演示等軟件,我們就需要掌握全屏獨占模式API。全屏獨占模式是一個功能強大的新功能,它它我們能夠"暫停"窗口系統,使應用軟件能夠直接向顯示屏上寫內容。
國際化
國際化指的是一個設計應用軟件的過程,在無需修改設計的情況下就能夠使應用軟件適用於多種語言和地區。 "internationalization"這個詞有時也被縮寫成"i18n",因為這個單詞的第一和最後一個字母之間有16個字母。為實現國際化,我們使用得最多的package是Java.util。
總結
數量眾多的Java技術會使我們感到困惑,但這篇文章使我們能夠了解開發桌面應用軟件所需要的技術。如果想讓我們的應用軟件具有一定的功能,我們就會找到很好的Java技術幫助實現我們需要的功能。