- J2ME應用開發詳解
- 陸昌輝主編
- 1008字
- 2019-01-01 07:06:59
第1章 引入J2ME平臺
本章將從定義J2ME開始講起,然后介紹它的總體架構并學習J2ME目標設備。作為架構討論的一部分,將提供有關簡表和配置的概述(后面的小節中將詳細介紹簡表和配置)。同時會簡要介紹打包和配置J2ME應用程序過程中的一些注意事項。
Sun Microsystems將J2ME定義為“一種以廣泛的消費性產品為目標的高度優化的Java運行時環境,包括尋呼機、移動電話、可視電話、數字機頂盒和汽車導航系統。”自從1999年6loper Conference上聲明之后,J2ME為小型設備帶來了Java語言的跨平臺功能,允許移動無線設備共享應用程序。有了J2ME,Sun已經使Java平臺能夠適應集成了或基于小型計算設備并在JavaOne Deve的用戶產品。
Sun Nucrosystems已發布了幾個Java版本,且它們維護著不同版本的體系結構的一致性。以系列方式發布的這些版本,由于每個版本都加入了一些新的功能,從而改進了它們的能力。但在Java1.2版發行之后,在Java的打包和許可證發放的方式上有些改變。這導致了Java平臺被拆成三個版本。
即不同環境的三個Java平臺是:
(1)Java2標準版(J2SE)
(2)Java2企業版(J2EE)
(3)Java2微型版(J2ME)
J2SE是工具和API的收集,主要用于創建Java Applets和單獨的、基于Web的應用。J2EE是對跨分布網絡和遠程訪問的單個應用的企業計算Java的回答。J2EE包含J2SE的所有功能,著重于用企業Java Beans(EJB),Servlets和Java服務器頁面(JSP),以及擴展置標語言(XML),進行服務器端編程。
1.1 J2ME和WAP
開發無線應用的一種方法是J2ME,它著重于無線計算環境,這是一個在不斷推進的領域。無線計算的主要限制是對硬件設備資源的制約,諸如手機,個人數字助手(PDA),及其他的電子和嵌入設備。Java2微型版(J2ME)是Sun公司的一種模塊化、定制的平臺,處理這些小到128 KB RAM的設備,且其處理器的能力低于臺式計算機的計算要求。
J2ME的多數特征是從J2SE派生出來的。J2ME的某些特征如下:
(1)可移植性。
(2)跨不同產品的內在的一致性。
(3)跨網絡的安全性。
(4)與J2SE平臺和J2EE平臺的兼容性。
開發無線應用的另一種方法是通過無線應用協議(Wireless Application Protocol)(WAP)。WAP是適應于由Web協議(諸如TCP/IP和UDP)使用的幾種數據處理技術的一種特例。WAP應用開發比較簡單,因為它重用了現有的Web技術。WAP不是為使用HTML而設計的,盡管許多WAP網關可把HTML轉換為特定無線設備的數據。為生成動態的WAP內容,可使用Servlets和Java Server Pages(JSP)或無線置標語言(Wireless Markup Language)(WML)。盡管WAP和J2ME是互補的技術,但它們以不同的方式進行操作。對于WAP的情形,移動設備運行一個訪問Intranet或Internet應用的瀏覽器。移動設備不包含任何其他的應用。另一方面,J2ME應用駐留在移動設備上,用戶可得到這些應用,即使個別沒有連接到網絡上。
1.2 J2ME的體系結構
J2ME使用配置和簡表定制Java運行時的環境(JRE)。作為一個完整的JRE,J2ME由配置和簡表組成,配置決定了使用的JVM,而簡表通過添加特定于域的類來定義應用程序。配置將基本運行時環境定義為一組核心類和一個運行在特定類型設備上的特定JVM。本書將在J2ME配置一章中詳細討論配置。
簡表定義應用程序;特定地,它向J2ME配置中添加特定于域的類,定義設備的某種作用。在本章1.6小節中將深入介紹簡表。下面的圖1-1描述了不同的虛擬機、配置和簡表之間的關系。它同時把J2SE API和它的Java虛擬機進行了比較。雖然J2SE虛擬機通常被稱為一種JVM,但是J2ME虛擬機、KVM和CVM都是JVM的子集。KVM和CVM均可被看作是一種Java虛擬機——它們是J2SE JVM的壓縮版,并特定于J2ME。

圖1-1 不同的虛擬機、配置和簡表之間的關系
1.2.1 配置概述
配置將基本運行時環境定義為一組核心類和一個運行在特定類型設備上的特定JVM。雖然還可能在將來定義其他的配置,但當前J2ME存在兩種配置。
(1)連接限制設備配置(CLDC)
特別與KVM一起用于內存有限的16位或32位設備。這是用于開發小型J2ME應用程序的配置(虛擬機)。(從開發的角度來看)它的大小限制讓它比CDC更有趣、更具挑戰性。CLDC同時還是用于開發繪圖工具應用程序的配置。Palm電腦便是一個運行小應用程序的小型無線設備的示例。本書將在本章1.5小節中深入介紹CLDC。
(2)連接設備配置(CDC)
與C虛擬機(CVM)一起使用,用于要求內存超過2 MB的32位體系結構。因特網電視機頂盒便是這類設備的一個示例。稍后將在本章1.5.3小節中簡要介紹CDC。
1.2.2 簡表概述
簡表定義了用戶的應用程序所支持的設備類型,它向J2ME配置添加了特定于域的類來定義設備的某種作用。簡表建立在配置的頂部。已經為J2ME定義了兩種簡表:KJava和移動信息設備簡表(MIDP),它們也被建立在CDLC上。這兩種簡表適用于小型設備。有一種綱要簡表,用戶可以在它的上面創建自己的簡表,這種綱要簡表也稱為基礎表,可供CDC使用。我們將在后面的章節中討論上述這些簡表,還會使用KJava和MIDP建立一些示例應用程序。
1.2.3 J2ME的目標設備
使用CLDC開發的J2ME應用程序的目標設備通常具有以下特征:
(1)可供Java平臺使用的160 KB到512 KB的總內存。
(2)功率有限,常常是電池供電。
(3)網絡連通性,常常是無線的、不一致的連接并且帶寬有限。
(4)用戶接口混亂,程度參差不齊;有時根本就沒有接口。
一些CLDC支持的設備,包括無線電話、尋呼機、主流個人數字助手(PDA),以及小型零售支付終端。
依照Sun Microsystems,CDC的目標設備通常具有以下特征:
(1)使用32位處理器。
(2)2 MB或更多可供Java平臺使用的總內存。
(3)設備要求的Java 2“藍皮書”虛擬機的全部功能。
(4)網絡連通性,常常是無線的、不一致的連接并且帶寬有限。
(5)用戶接口混亂,程度參差不齊;有時根本就沒有接口。
一些CDC支持的設備,包括常駐網關、智能電話和通訊器、PDA、管理器、家用電器、銷售網點終端以及汽車導航系統。
1.3 開發J2ME程序注意事項介紹
在本節中,首先介紹在為小型設備開發應用程序時需要牢記的一些注意事項,然后介紹在使用J2SE編譯J2ME應用程序時調用編譯器的方法,最后將探究打包和部署,以及在這個過程中提前驗證所扮演的角色。
1.3.1 設計開發小型設備應用程序要注意的事項
為小型設備開發應用程序,需要用戶在設計階段制定某種策略。最好是在開始編寫代碼之前,戰略性地為小型設備設計應用程序。由于無法考慮到所有的“gotchas”,在開發應用程序之前更正代碼是一件很痛苦的工作。下面是一些可以考慮的設計策略:
(1)保持程序簡單。除去不必要的功能,如果可能的話,將它們做成獨立的、次要的應用程序。
(2)程序越小越好。這一點對所有的開發者來說應該是顯而易見的。越小的程序占用的設備內存越少,并且花費的安裝時間越少。可考慮將用戶的Java應用程序打包,作為壓縮的Java檔案(jar)文件。
(3)運行時占用最少的內存。為盡可能減少運行時占用的內存,使用標量類型代替對象類型。同時,不依賴垃圾收集程序。用戶應該在使用完對象時將對象引用置空,這樣可有效管理內存。另外一種減少運行時所需內存的方法是使用“惰性”實例,它僅在必需時才分配對象。其他一些減少小型設備上過量和峰值內存使用的方法有快速釋放資源、重新使用對象以及避免異常。
1.3.2 設計開發移動設備應用程序的注意事項
開發移動設備應用程序的規則與前面提及的開發小型設備的相同:先設計再編碼。讓用戶檢查一下開發移動設備應用程序時可考慮的一些設計建議:
(1)讓服務器做大部分的工作。將計算性較強的任務放到服務器上,讓服務器為用戶做這些工作。讓移動設備處理界面和最少的計算工作,而讓服務器做繁重的工作。當然,用戶為其開發應用程序的移動設備對設備連接到服務器上的難易程度和頻率有重要影響。
(2)謹慎地選擇編程語言。J2ME仍然處于成長期,可能還不是最好的選擇。根據用戶的需要,選擇其他的面向對象語言,如C++,可能會更好。
1.3.3 性能注意事項
為性能而編碼。下面介紹一些以獲得最優性能為目標的編碼方法:
(1)使用局部變量。訪問局部變量比訪問類成員更快。
(2)避免字符串串聯。字符串串聯不僅會降低性能,而且會增加應用程序的內存峰值占用量。
(3)使用線程,避免同步。任何運行時間超過1/10 s的操作都需要一個獨立的線程。避免同步同樣能提高性能。
(4)使用模型視圖控制器(MVC)分離模型。MVC將代碼中控制顯示的邏輯分離出來。
1.3.4 編譯注意事項
同其他的Java應用程序一樣,用戶在打包和部署應用程序之前要先進行編譯。盡管有了J2ME,用戶仍然使用J2SE編譯器并且需要用適當的選項來進行調用。用戶需要使用-bootclasspath選項來指示編譯器使用J2ME類,而不是J2SE類。不要在編譯器的CLASSPATH中設置配置類。這樣將導致運行時錯誤,因為不管CLASSPATH中有什么,編譯器將首先自動搜索J2SE的核心類。換句話說,編譯器將無法引用特定J2ME配置中缺少的類或方法,結果導致在嘗試運行應用程序時出現運行錯誤,如圖1-2所示。

圖1-2 編譯錯誤
1.3.5 打包和部署注意事項
由于J2ME是為內存有限的小型設備設計的。大部分常用的Java提前驗證已經從虛擬機中除去,以形成一個較小的覆蓋區域。結果,在配置之前提前驗證J2ME應用程序就很有必要。在運行時會附加一個檢查以確保這個類在提前驗證之后還沒有改變過。
如何嚴格執行提前驗證或者檢查類的正確性依靠的是工具包。CLDC提供一個稱為提前驗證的命令行實用程序,它能夠進行實際的驗證并且可以把一些額外的信息插入到類文件中去。MIDP使用無線工具包,這種工具包提供一種GUI工具,也可從命令行運行這種工具。
部署工作取決于用戶要部署的平臺。應用程序必須以一種適合J2ME設備類型的格式進行打包和配置,就如簡表定義的那樣。
1.4 無線編程的新趨勢
世界逐漸地從有線網時代轉向無線網時代。用戶將不斷地看到連接無線網的小型設備彼此通信,類似于通過PC用有線網的方式進行。這些設備包括手機、手持計算機、傳呼機、掌上OS(Palm OS)設備。所有這些設備將使用如J2ME這樣的平臺來運行專門為這些手持設備開發的不同應用軟件。
1.4.1 J2ME使能設備
J2ME正成為創建移動設備、消費電子產品,以及嵌入式設備的新應用的最合適的平臺。J2ME體系結構由支持各式各樣設備的不同的配置類型、特征和規格說明組成。CDC配置支持CVM,它是為消費電子產品及嵌入式設備定制的JVM。這些設備有相當于手持設備那樣較好的硬件資源。其基本特征由Java API組成。這種特征是CDC配置的組成部分,其組合將成為構建未來消費電子產品及嵌入式設備的技術。
MIDP是一組Java API。其特征是CLDC配置的組成部分,以創建客戶化的手持設備的應用。使用J2ME技術的不同設備可廣義地分兩種類型:手持設備和消費電子產品及嵌入式設備。手持設備利用CLDC配置運行Java應用。反之,消費電子產品及嵌入式設備利用CDC配置運行Java應用。
手持設備有較少的內存資源、較低的處理器速度和不規則的網絡連接。這種設備的例子包括個人數字助理(PDAs),蜂窩電話、基于Palm OS的設備和形成體(organizers)。
另一方面,消費電子產品及嵌入式設備有大量的內存、高的處理器速度、且總是與網絡連接。這種設備的例子包括機頂盒、Internet TV、屏幕電話和高端通信裝置。
提示
手持設備上可用的內存一般范圍為32 KB到512 KB,常用的消費電子產品及嵌入式設備的內存能力在1 MB到10 MB之間。
1.4.2 J2ME使能設備的優點
使用J2ME技術,服務提供者可基于每種客戶設備的資源說明提供獨特的、特定于客戶的應用。J2ME應用可部署在各種各樣資源約束的設備上。只要設備是依從J2ME的,這可用于任何網絡和任何的平臺。J2ME對最終用戶也是有好處的。最終用戶可基于他們的需要直接下載應用和產品到他們的移動設備上。因此,用戶可不必為手機和其他的手持設備購買預先安裝在設備上的應用和產品。
提示
移動設備部門的主要機構,如NTT DoCoMo、Inc.、LG Telecom和Nextel,已經共同在3百萬以上的無線手持設備上部署了J2ME技術。移動設備制造商,如Nokia、Motorola、Siemens、NEC、Sony、Samsung以及LG Electronics,已經開始將運輸設備和Java技術集成起來。
當前,用J2ME創建的幾種移動設備應用正廣泛地用在無線設備上。這些移動設備應用的例子如下。
● 我的航行:客戶可以檢查個人的航行材料。例如,累計飛行距離及費用償還圖,客戶可核對飛行材料和選擇用E-mail通報飛行材料。
● 我的天氣:向客戶提供有音樂背景的每天的天氣預報。此外,在下雨天時得到報警。
● 我的名人:可讓客戶觀看流行的名人網站中的消息。
1.4.3 服務器應用和應用門戶
J2ME的主要著眼點是在小而資源有限的設備上提供最終用戶的應用,J2ME還包括其他兩種類型的應用——服務器應用和應用門戶。
1. 服務器應用
設計J2ME服務器應用以幫助服務提供者提交更好的最終用戶應用。服務器應用在Web服務器上運行,且易于在用戶設備上部署MIDlets。
提示
也可在非Java平臺上創建服務器應用。
服務器應用的典型例子是包括:
● AppStream
● 4thpass Mobile Application Server(MAS)
AppStream是一種流應用(application streaming)使能的服務器應用,它類似于流媒體(media streaming)。一般情況下,用戶下載文件時,在文件完全下載好之前不可能打開文件和運行它。但流媒體的情況下,用戶不必完全下載好音頻或視頻文件就可播放它,甚至在下載時就可開始播放文件。類似地,用流應用還可在下載時就可運行應用。這對于由慢速網絡下載應用到內存和速度有限的設備上的用戶來說特別有意義。稱為AppStream的公司提供了這種應用。
4thpass Mobile Application Server(MAS)是一種服務器應用,它有助于減少在速度較慢的無線網絡上下載的時間。稱為4thpass的公司開發了這種應用。
2. 應用門戶
J2ME應用門戶是致力于以MIDlets的形式提供最終用戶應用的Web站點。這些MIDlets按他們的應用定價。某些MIDlets在Web上是免費的。應用門戶能使移動設備用戶直接下載MIDlets到他們的設備上,減少用戶對提供這些應用的服務提供者的依賴。這些門戶也有助于軟件廠商把他們的產品(MIDlets)直接銷售給用戶。
創建MIDlets的任何人可在應用門戶上張貼它。用戶可從這些門戶中把這些MIDlets下載到他們的移動設備。Sun的官方網站(http://java.sun.com)提供了與能下載MIDlets的某些門戶的鏈接。
提示
讀者可通過http://midlet.org訪問midlet.org,通過http://jars.com訪問jars.com。
1.4.4 J2ME與其他Java技術的匯集
J2ME之前,Sun公司引入過一些技術,尤其是對于小型的手持設備。由于J2ME的到來自然地期望Sun能把這些技術與J2ME匯集起來以拓寬J2ME可提供的應用范圍。
J2ME開始之前,Sun已經引入了稱為個人Java的技術(PersonalJava)。在普通家用電子裝置上使用PersonalJava能使它們的功能自動化。假定J2ME是PersonalJava自然的后繼者。但PersonalJava仍然在不適用于兩類J2ME配置(CDC and CLDC)的小裝置上使用。這些小裝置需要它們自己的特征。Sun現在決定把這些設備包括在受CDC配置影響的基礎特征(Foundation profile)中。Sun通過使PersonalJava與J2ME的集成來替代PersonalJava。
Sun開發的JINI作為不同平臺下的不同網絡和作業的集成系統的一種中間解決方案。在JINI的幫助下,任何類型的設備(如打印機、揚聲器、存儲設備等)可插入到網絡。用戶可立即看到網絡中設備并使用它。新插入到網絡的設備將在網絡設備注冊表中定義它自身。
提示
JINI替代了使用稱為Device Drivers的軟件,使用它可把關于網上新加入的硬件通知操作系統。
使用JINI時,操作系統用網絡設備注冊表跟蹤新加入的硬件。目前,設計的JINI僅在J2SE和J2EE平臺下工作。JINI對于解決與嵌入系統的連接問題十分有效。因此,JINI也十分適宜在J2ME平臺下工作。
Web服務能使組織獨立于基礎網絡和任何一端上的平臺訪問Internet上的服務和應用。用數據格式和諸如XML和簡單對象訪問協議(SOAP)這樣的協議創建這些Web服務。通過J2ME、J2EE和XML的集成,它可在J2ME依從的移動設備上訪問存儲在J2EE應用服務器中的Web服務。
1.4.5 Java卡和J2ME靈巧卡的演化
靈巧卡在物理外形上類似于信用卡。但靈巧卡包含一個小的計算機芯片,與信用卡相比它們是動態的。靈巧卡可具有相當于電子現金的功能。電子現金允許用戶支付交易的現金而不必通過銀行賬戶。
Java卡是能夠執行Java程序的靈巧卡。它們主要用于處理數據的訂戶標識模塊(SIM)卡。這是通過連接卡到手機來做。Java卡類似于信用卡,但可發送、接收和處理數據。這是通過卡片讀入機將Java卡連接到計算機上來做的。
Java Card相對原先的靈巧卡來說有以下優點:
● 可互操作性
● 安全性
● 能運行多種應用
● 靈活性
Java卡提供了可互操作性,因為用Java技術開發的任何Java Applet將在Java卡中起作用,不管其基礎硬件是什么。此外,Java卡具有與Java編程語言那樣的安全和靈活性。Java卡能提供多種應用,因為它包含若干個Applets,每個Applets提供了不同的應用。Java卡又是動態的,因為服務提供者能按照用戶的需要加入和除去Java卡提供的應用。
靈巧卡與SIM卡一樣主要在手機中使用。以前,手機主要用于聲音傳遞。但隨著Java卡的到來,服務提供者現在能提供各種各樣的新服務,諸如:網上銀行、通過電子商務的貿易和訪問Web站點,把手機信息轉到PC機上。
提示
Java卡應用的一個典型例子是美國國防部提供的公共訪問卡(Common Access Card)。此卡可以使軍事人員和其他授權的用戶訪問軍用設施和其他敏感的資源。
Sun沒有提出在Java卡上實現J2ME技術的任何計劃。但J2ME提供了創建Java卡應用的理想平臺。目前,Java卡用Java卡虛擬機(JCVM)執行程序。如果J2ME能進入這種想象的話,那么這個卡將必須適應KVM執行J2ME MIDlets。但如果KVM不能在Java卡環境中運行的話,Sun將可能必須創建CLDC配置下的Java卡的新特征。
1.4.6 J2ME在GADGET編程中的作用
Sun開發Java的目的是在家用電器中使用Java,以使這些設備更靈巧和更有交互性。用J2ME和小裝置編程的概念,使Sun在實現這個目標上更接近了。
使用JVM的嵌入式公共電子小裝置使這些小裝置能執行Java程序。這是所謂的小裝置編程(gadget programming)。小裝置編程使用戶能從單個測點控制不同的小裝置,提供遠程控制這些小裝置的機制。小裝置編程也使這些設備可交互和自動化。這些小裝置編程可對來自計算機的指令做出應答。例如,有些烘箱能直接接收來自TV的烹調指令而不要用戶干預。這是直接的小裝置到小裝置的交互。類似地,可為基于用戶的需要為其他的器具(如空調、音頻和視頻系統、洗衣機、真空洗塵器、電冰箱等)構建應用。所有這些小裝置可連接到中央服務器。這種服務器將包含Java程序,控制這些小裝置的操作,使它們高度自動化和可交互,從而創建“靈巧家用設備(smart home)”。靈巧家用設備的主要特點是可連接到外部網絡(如Internet),和從遠程站點控制它們。現在,還沒有使用J2ME技術的嵌入式小裝置。但J2ME已經證明了它在小型無線設備中價值。因此,可以預期它將成為未來小裝置編程的主流技術。
提示
Consumer Electronic Show 2000陳列了用Java技術創建的靈巧家用設備。Sun稱它為.com Home。.com Home由一些小裝置組成。例如,配有Web面板的冰箱以瀏覽網絡,可編程的洗滌器在出現故障事件時可自動地通知制造廠商。這種靈巧家用設備也能使咖啡壺可自動地通過Internet更新其功能。
小裝置編程的另一個例子是建立自動汽油泵中使用J2ME技術。未來的汽油泵將與賬戶系統結合起來,這樣人們就不需要管理它們。汽油泵也將提供達到不同目的地的道路圖。假如汽油泵配有Java驅動的系統,它也有可能直接和汽車交互,然后對汽車中可能的缺陷向用戶提出警告,并提醒用戶維修細節。也可能在Java卡中存儲這種維修細節。這將保證:當用戶要支付而猛打卡時,該汽油泵回自動地告訴用戶關于需要注意的問題。
提示
GM、Ford、BMW和Fiat等汽車制造商已經構造了Java驅動系統的車輛原型,他們提出這種車輛的行駛版本僅僅是時間問題。
1.4.7 用J2ME的娛樂軟件編程
軟件市場中視頻娛樂業是爭錢最多的產業之一。現在市場的主要游戲者已認識到這個等待開拓的巨大的、未觸及的市場,并已逐漸把注意力轉向生產移動設備的娛樂軟件。軟件廠商和移動設備制造商正在聯手提供移動設備的娛樂軟件。
提示
這種聯手的例子包括娛樂廠商THQ Inc和移動設備制造商Sony Ericsson之間的聯合,另一個例子是娛樂廠商Sega和移動設備制造商Motorola之間的聯合。按照這種聯合,娛樂廠商將創建只能在他們聯合方制造的移動設備上運行的娛樂程序。
目前,世界上有6億以上的手機用戶,而且用戶的數目正以指數速度增長。這就導致了開發專為手機而設計的全新的娛樂。盡管在100 ×100 像素屏幕上提供圖形豐富的娛樂是不容易的,但手機娛樂相比桌面視頻娛樂有它的優點。它們是可攜帶的,因此只要用戶帶上移動設備,就可在任何地方播放。預期J2ME是移動設備娛樂軟件的核心。用J2ME開發移動設備的娛樂是簡單而容易的。這些娛樂增加了設備的價值和制造商的吸引力。創建計算機和控制臺的視頻娛樂涉及到藝術家和編程員,要花費大量的人力,這會引起巨大的開銷。而另一方面,J2ME提供了不可思議的創建娛樂的容易環境。幾種商標的J2ME使能的電話包含這樣的API,可讓用戶訪問通常手機不能提供的特殊功能。包含這種API手機的例子包括Motorola和Nokia制造的手機。這些制造商已創建了可在娛樂中有音頻、動畫、及更好圖形的娛樂API。使用J2ME平臺的另一個主要優點是在其他平臺上運行的現有的娛樂可容易地移植到這個平臺。
當前,J2ME有兩種規格說明用于娛樂編程和多媒體應用:
● Gaming API
● Mobile Media API
Gaming API規格說明是用于建立使用CDC配置設備的娛樂。用Mobile Media API訪問多媒體內容。
Sun當前正在從事新的API,移動3D圖形(Mobile 3D Graphics)API,將它包含在CLDC配置中。這種API將在MIDP中提供選項包,將極大地改善3D外觀、圖形、J2ME中娛樂的活躍特征。通過使用這種API,開發者將能為移動設備創建圖形豐富的娛樂。此外,這種API也將使應用開發者創建栩栩如生的消息和類似于桌面工作站中的屏幕保護程序。
Mobile 3D Graphics API具有以下特點:
● 有助于創建各種移動應用的3D圖像。
● 占有最少的設備資源,因此可在任何手持設備中使用。
● 用這種API創建的任何3D應用,不管簡單的或高級的,都可在移動設備上運行。
提示
Sun的J2ME Wireless Toolkit帶有娛樂的源代碼。例如,TilePuzzle、WormGame、PushPuzzle、Snake、Sokoban、Pong、Star Cruiser,以及Tile Sliding游戲。
Sun也正在開發新的虛擬機,它可大大地改進現在用的KVM的性能。這個新的虛擬機將使3D圖形應用和運行在移動設備上的其他的復雜應用大大地前進一步,且消耗更少的內存和電池能量。
1.4.8 J2ME與多媒體的匯集
多媒體內容(如音頻和視頻文件)即使是壓縮的形式也要消耗大量的內存。因此,對于內存能力差和低的處理器速度為特征的J2ME設備來說,把它與多媒體鏈接起來是很不合理的。但事實上服務提供者正在選擇可能的J2ME通過手機提交多媒體內容。
● 移動設備的視頻:PacketVideo的公司開發的一個軟件,允許在無線網絡上傳輸視頻流。移動服務提供者使用這個軟件把新聞剪輯和影片預告傳輸到手機。正在構建的稱為PacketVideo的軟件使用了視頻的MPEG-4標準,并使用J2ME平臺。
● 移動設備的音頻:音頻文件以MP3格式被數字化地存儲以使內存的需求最少。MP3格式與J2ME技術一起可把這種文件傳輸到移動設備,現在,用戶可把音頻內容下載到諸如:MP3播放機、手機,以及傳呼機之類手持設備上,在無線網絡上提供這種功能的前沿廠商是稱為Sensate的公司。Sensate已開發了稱為AoIP Wireless Media Server的應用,可使用戶下載音頻內容到手持設備上。此應用需要每個用戶建立與客戶的連接以下載音頻文件,采用J2ME技術開發。
1.5 J2ME配置
正如前面所介紹的,配置將基本運行時環境定義為一套核心類和一個運行在特定類型設備上的特定的JVM。讀者也可以學到J2ME的兩種配置類型是CLDC和CDC。
Sun提供的J2ME配置是適合不同層次的市場需求的,CLDC適合于小型設備,而CDC適合于大型設備。J2ME環境可以被動態地配置為提供運行應用程序所需要的環境,而不用考慮是否為設備提供了運行該應用程序所需的所有Java技術庫。核心平臺接收應用程序代碼和庫。運行在網絡上的服務器軟件執行配置工作。CDC主要用于具有網絡連接性的高端消費者設備。這些設備包括機頂盒、Internet TV,以及汽車導航系統。
提示
機頂盒是一種能使電視機作為與Internet用戶接口的設備,也能檢索數字電視(DTV)廣播。
CDC支持以下的Java包如表1-1所示。
表1-1 CDC支持的Java包

注意
J2ME應用不可訪問定制包。
CLDC是處理能力比高檔消費者設備低的設備。使用CLDC的某些常用設備是手機、私人記事器(personal organizers)和傳呼機。
下面將介紹有關CLDC和CDC的更多知識以及與它們關聯的簡表。
1.5.1 連接限制設備配置(CLDC)
CLDC是由Java Community Process創建的。正如Sun Microsystems的Web站點所定義的那樣,它的標準是:“輕便、覆蓋區域最小的Java構建塊,適合小型的、有資源限制的設備”。
J2ME CLDC配置是為將在業界定義的簡表中使用的一個虛擬機和一套核心庫準備的。正如前面提及的,一個簡表通過在基本J2ME配置頂部提供特定于域的類來為特定的設備定義應用程序。K虛擬機(KVM)、虛擬機的CLDC的參考執行和它的KJava簡表運行在CLDC的頂部。
CLDC簡要描述了高度限制設備上每個J2ME執行所要求的一套最基本的庫和Java虛擬機特征。CLDC主要面向那些網絡連接速度慢、能源有限(經常是電池供電)、具有大于等于128 KB的穩定內存,以及大于等于32 KB的不穩定內存的設備。不穩定內存是不持久的并且沒有寫保護,這意味著如果關掉設備,內存中的內容將全部丟失。而穩定內存中的內容是持久的,并且有寫保護。CLDC設備使用穩定內存來存儲運行時的庫和KVM,或存儲為某個特殊設備創建的另一個虛擬機。不穩定內存被用來分配運行時的內存。
J2SE API不適用于手持設備,因為它們需要大量的內存。因此,CLDC庫API中不包括所有的J2SE API。不同種類的CLDE庫API如下:
CLDE庫包含J2SE API的子集類。這些J2SE-特定的類設置在java.lang、java.io和java.util包中。表1-2列出了一些從這些包中繼承過來的類。
表1-2 從J2SE包中繼承的類

CLDC庫包含CLDC特定的幾個新的接口和類,它們構成了javax.microedition.io包的一部分,J2ME中用它支持CLDC的連網能力。表1-3列出了這些類。
表1-3 javax.microedition.io包的一部分類

J2ME中核心API包括來自諸如java.lang和java.util之類包的一些類。所有這些API被不同的配置使用,因此,這些API應得到包括KVM在內的所有虛擬機的支持。表1-4列出J2ME中使用的核心API可用的不同類。
表1-4 java.lang和java.util之類包的一些類

提示
在某些情況下,如J2ME中那樣使用J2SE包,例如,java.util和java.io包。但由于資源的制約,只是某些J2SE包的一個子集,如java.lang所使用的那樣。其中有些包,如微編輯包,則是為J2ME全部重寫過的。
1.5.2 CLDC要求
CLDC定義了下列要求:
● 完整的Java語言支持(除浮點支持、最終定案和錯誤處理之外)。
● 完整的JVM支持。
● CLDC的安全性。
● 有限國際化的支持。
● 繼承類:所有不針對CLDC的類都必須是J2SE 1.3類的子類。
● 針對CLDC的類都在名為javax.microedition的軟件包和它的子包中。
除javax.microedition軟件包以外,CLDC API還由J2SE的子集java.io、java.lang以及java.util等軟件包組成。
1.5.3 CLDC與CDC的比較
圖1-3描述了CDC和CLDC之間的關系,同時也揭示了它們與整個J2SE API系統的關系。正如前面所說,CDC是加上一些額外類的J2SE的子集,讀者也可以看到CLDC是CDC的子集。

圖1-3 CLDC與CDC的比較
1.6 J2ME簡表
一個簡表定義了受支持設備的類型。例如,移動信息設備簡表(MIDP),定義了蜂窩電話的類。它把一些特定于域的類加入J2ME配置中來定義對類似設備的使用。已經為J2ME定義了兩個簡表:KJava和MIDP。它們都構建在CLDC之上。KJava和MIDP都和CLDC及小型設備相關聯。
簡表被構建在配置的頂部。由于簡表是特定于運行應用程序的設備的大小(內存的數量),所以,某個簡表是與某種特定的配置相關聯的。
在綱要簡表上,用戶可以創建自己的簡表,這種綱要簡表也稱為基礎表,它對于CDC也是可用的。然而,在本書中,將只介紹建立在CLDC上的KJava和MIDP簡表。
1.6.1 KJava簡表
KJava是歸Sun公司所有的簡表,它包含KJava API。KJava簡表建立在CLDC配置的頂部。KJava虛擬機可以像標準的J2SE虛擬機那樣接受相同的字節代碼和類文件格式。
KJava包含一個特定于Sun的、運行在Palm操作系統上的API。這個KJava API和J2SE抽象視窗工具包(AWT)有很多地方都是相同的。然而,由于它不是一個標準的J2ME軟件包,它的主軟件包是com.sun.kjava。在第10 章中開發一些示例應用程序時會介紹更多關于KJava API的知識。
1.6.2 MIDP簡表
MIDP適合諸如蜂窩電話和尋呼機等移動設備。MIDP和KJava一樣,也是建立在CLDC之上的,并且提供一個標準的運行時環境,允許在終端用戶設備上動態地部署新的應用程序和服務。
MIDP是一個公共的、為移動設備設計的工業標準簡表,它不依賴某個特定的商家。對于移動應用程序開發來說,它是一個完整的、受支持的基礎。
MIDP包含一些附加的庫,它們為與用戶界面和數據庫的交互提供了Java API。此外,這些Java API提出了諸如應用生命周期和特定設備聯網之類的問題。用戶可用MIDP下的API來創建各種不同的應用,如消費者應用和游戲軟件等。MIDP應用稱為MIDlets,表1-5中描述了不同的MIDP包。
表1-5 MIDP包的部分類

注意
屬于移動信息設備分類的PDA特征,仍處于它的構造階段。
在移動信息設備(如手機和傳呼機)中使用的MIDP有以下特點:
● 屏幕的最低大小為96 ×54像素
● 1位顯示深度
● 輸入設備,如:鍵盤或觸屏
● 關于MIDP部件,最少128 KB非易失內存
● 雙向無限可連接性
此外,MIDP在低端處理器上運行,創建最少的無用信息。在J2ME中,CLDC與MIDP結合形成了綜合的運行時環境。系統級服務的接口是由其配置,CLDC提供,而應用級服務的接口是由特征MIDP提供。
注釋
用戶可控制顯示的像素,用“位”來指出顏色或灰度級。1位顯示移位:1個像素使用1位。
1.6.3 MIDP取代KJava
正如在前面的1.6.1小節中提及的,KJava是Sun公司所擁有的一個API。它不作為一種完整的、功能齊全的簡表,而是作為一種示范,示范簡表如何與CLDC一起工作。根據CLDC發行說明(其中包含CLDC下載版本)。
在軟件包com.sun.kjava中提供的GUI類不是連接限制設備配置CLDC的一部分。Java 2平臺袖珍版的正式GUI類,將通過Java Community Process分別定義并被包含進J2ME簡表中。
不管這個事實存在與否,KJava簡表已經被早期的采用者廣泛使用了。在2001年JavaOne的開發商會議上,Sun公司宣稱早期Palm操作系統的MIDP可用性(MID簡表的最初發行版焦點主要集中在無線電話上)。Palm操作系統MIDP的規格是由Java Community Process(JCP)定義的。因此,它是獨立于供應商的。當前眾多限制中的一個——它將隨時間消失——就是Palm操作系統的MIDP需要最新的Palm操作系統——V3.5。
在作者寫這本書的同時,Palm操作系統的MIDP的規范仍然在隨著JCP不斷發展,其細節也會隨時改變。盡管目前還無法確定其發行日期,但是規范一旦出臺,將必然減少對KJava的需求。
1.7 J2ME無線工具箱
J2EE和J2SE平臺用于創建在高速、大容量存儲設備上運行的應用。對于為這種設備寫的Java應用由使用大量內存的JVM編譯。但與JVM相比,KVM占有較少的內存,嚴重地限制了它的能力。移動應用中的任何虛擬機必須能夠識別和拒絕無效的類文件。KVM的限制之一是它不可能執行類文件的檢驗。要求這些檢驗過濾不屬于CLDC配置的類文件。因此,需要一種機制能在KVM之外執行類文件檢驗,這由J2ME無線工具箱完成。這個工具箱是Sun公司用來構建和測試MIDlet的一組工具。
創建MIDlet之后,必須測試它以保證應用能成功地運行。如果開發的MIDlet要在不同的移動設備上運行,必須在每個這些設備中測試它。J2ME無線工具箱提供了模擬這些環境和測試應用的一種機制。這些被模擬的測試消除了在特定設備中MIDlet發生故障的可能性。
1.7.1 J2ME無線工具箱的結構
J2ME無線工具箱由兩個部件組成:
● 字節代碼檢驗器(Bytecode verifier)
● J2ME仿真器(emulator)
此外,由Motorola發布的某些J2ME無線工具箱(如J2ME的SDK),還包含稱為配置編輯器(Configuration editor)的附加部件。
1. 字節代碼檢驗器
如前面提到的,J2ME MIDlet必須遵循CLDC配置。J2ME不支持J2SE中可用的所有的類文件。CLDC配置進一步限制了這些類文件的使用。在這種情形下,虛擬機必須能夠定位并拒絕來自MIDlet的所有的無效類文件,只保留有效的類文件。KVM不可能執行這些任務。因為,使用字節代碼檢驗器。過濾無效類的過程稱為預檢驗。在MIDlet的開發階段執行預檢驗過程。然后準備把被檢驗的MIDlet作為應用被裝入。字節代碼檢驗器的優點是:它減少了KVM的工作負荷。這可讓KVM完全集中于編譯過程而不必檢查無效的類文件。歸結起來,字節代碼檢驗器用來定位并拒絕來自MIDlet的所有無效的類文件,只保留有效的類文件。過濾無效類的類文件的過程稱為預檢驗。減少了KVM的工作負荷,可讓KVM完全集中于編譯過程而不必檢查無效的類文件。
在預檢驗過程中,.class文件被轉換為.jar文件。MIDlet被編譯之后,以.class擴展的方式存儲它,這類似于Java字節代碼文件。下一步是預檢驗過程,此后,.class文件被轉換為.jar文件。預檢測過程如圖1-4所示。

圖1-4 預檢測過程
除了MIDlet類和其他的支持類之外,MIDlet JAR文件還包含以下元素。
● MIDlet:MIDlet類文件。
● Manifest文件:又稱為應用描述符,這個文件描述了MIDlets,諸如:MIDlet的名、廠商名,等等。用擴展jad來保存此文件。
● 其他資源:這些資源包括:MIDlets使用的圖像文件和聲音文件。
單個JAR文件可以包含一個以上的MIDlet。若干個MIDlets一起形成了MIDlet套件。應用描述符提供了由套件訪問特定MIDlet所需的信息。這種應用描述符作為JAR文件內的.jad文件存儲。存儲在JAR文件中的其他資源包括聲音和圖像文件。
2. J2ME仿真器
在準備部署MIDlet之前,必須在真實的情況下測試它。這涉及到測試創建它的每個設備中的MIDlet。用J2ME仿真器來執行此測試。該仿真器提供了在PC上測試代碼的有效的被模擬的環境。當執行此模擬時,設備的圖像出現在屏幕上,應用的執行完全像在特定設備上執行的那樣。用戶可通過鼠標點擊設備上的不同按鈕來與設備交互。
J2ME無線工具箱能模擬以下設備的環境:
● DefaultColorPhone
● DefaultGrayPhone
● MinimumPhone
● Motorola i85s
● PalmOS_Device
● RIMJavaHand-held
圖1-5 描繪了J2ME仿真器屏幕,這在測試游戲軟件時出現在3 種不同的移動設備(DefaultGrayPhone、RIMJavaHand-held和Motorola i85s)上的MIDlet。

圖1-5 不同的仿真器
J2ME仿真器具有以下優點:
● 幫助用戶在模擬的環境中重復地運行MIDlet直到確定錯誤為止。
● 提供讓用戶可在不同的設備上測試運行MIDlets單個接口。
● 分析MIDlet的特定方面,如:無用單元收集和裝入類文件。
盡管用戶可認為J2ME仿真器是一個完整的解決方案提供者,但它有一些限制。仿真器不能以確實的精度來測試和檢驗MIDlets的一些特點。這些限制主要包括:
● 執行速度
● 內存可用性
創建在不同設備上運行的MIDlet,每個設備有它自己的處理器速度。因此,希望有一種仿真器能以不同的速度測試運行MIDlets,但是J2ME Wireless Toolkit的當前版本還做不到這一點。同樣,要對不同設備中MIDlets測試其可用的內存,內存可用性決定了應用能否在設備內很好地運行。對于可變的可用內存,在仿真器中測試運行MIDlet是不可能的。
仿真器的另一個限制是它不能模擬駐留在每個移動設備上的應用管理器(application manager)的工作。應用管理器負責在移動設備內添加、刪除和執行MIDlet。仿真器不能模擬應用管理器的工作。因此,它不可能確切地確定這些MIDlets怎樣在設備內被管理的。
3. 配置編輯程序
配置編輯程序幫助用戶配置設備環境。這意味:用戶可改變設備內可用的不同特征。例如,用戶可修改設備圖像、屏幕大小,以及設備中可用的按鈕。這樣,編輯程序提供了可讓用戶控制模擬環境的機制。
注釋
Sun公司發布的標準J2ME Wireless Toolkit不提供配置編輯程序。但這個標準工具箱能讓用戶配置設備環境。在Motorola發布的J2ME的SDK中,有這個功能。