天天看點

利用Java技術編寫桌面軟體基礎

 在學習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中常用的界面

利用Java技術編寫桌面軟體基礎

圖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。