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

小宇飛刀發表於2009-04-25

 在學習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技術幫助實現我們需要的功能。

相關文章