官术网_书友最值得收藏!

第1章 引入J2ME平臺(tái)

本章將從定義J2ME開始講起,然后介紹它的總體架構(gòu)并學(xué)習(xí)J2ME目標(biāo)設(shè)備。作為架構(gòu)討論的一部分,將提供有關(guān)簡(jiǎn)表和配置的概述(后面的小節(jié)中將詳細(xì)介紹簡(jiǎn)表和配置)。同時(shí)會(huì)簡(jiǎn)要介紹打包和配置J2ME應(yīng)用程序過程中的一些注意事項(xiàng)。

Sun Microsystems將J2ME定義為“一種以廣泛的消費(fèi)性產(chǎn)品為目標(biāo)的高度優(yōu)化的Java運(yùn)行時(shí)環(huán)境,包括尋呼機(jī)、移動(dòng)電話、可視電話、數(shù)字機(jī)頂盒和汽車導(dǎo)航系統(tǒng)。”自從1999年6loper Conference上聲明之后,J2ME為小型設(shè)備帶來了Java語(yǔ)言的跨平臺(tái)功能,允許移動(dòng)無線設(shè)備共享應(yīng)用程序。有了J2ME,Sun已經(jīng)使Java平臺(tái)能夠適應(yīng)集成了或基于小型計(jì)算設(shè)備并在JavaOne Deve的用戶產(chǎn)品。

Sun Nucrosystems已發(fā)布了幾個(gè)Java版本,且它們維護(hù)著不同版本的體系結(jié)構(gòu)的一致性。以系列方式發(fā)布的這些版本,由于每個(gè)版本都加入了一些新的功能,從而改進(jìn)了它們的能力。但在Java1.2版發(fā)行之后,在Java的打包和許可證發(fā)放的方式上有些改變。這導(dǎo)致了Java平臺(tái)被拆成三個(gè)版本。

即不同環(huán)境的三個(gè)Java平臺(tái)是:

(1)Java2標(biāo)準(zhǔn)版(J2SE)

(2)Java2企業(yè)版(J2EE)

(3)Java2微型版(J2ME)

J2SE是工具和API的收集,主要用于創(chuàng)建Java Applets和單獨(dú)的、基于Web的應(yīng)用。J2EE是對(duì)跨分布網(wǎng)絡(luò)和遠(yuǎn)程訪問的單個(gè)應(yīng)用的企業(yè)計(jì)算Java的回答。J2EE包含J2SE的所有功能,著重于用企業(yè)Java Beans(EJB),Servlets和Java服務(wù)器頁(yè)面(JSP),以及擴(kuò)展置標(biāo)語(yǔ)言(XML),進(jìn)行服務(wù)器端編程。

1.1 J2ME和WAP

開發(fā)無線應(yīng)用的一種方法是J2ME,它著重于無線計(jì)算環(huán)境,這是一個(gè)在不斷推進(jìn)的領(lǐng)域。無線計(jì)算的主要限制是對(duì)硬件設(shè)備資源的制約,諸如手機(jī),個(gè)人數(shù)字助手(PDA),及其他的電子和嵌入設(shè)備。Java2微型版(J2ME)是Sun公司的一種模塊化、定制的平臺(tái),處理這些小到128 KB RAM的設(shè)備,且其處理器的能力低于臺(tái)式計(jì)算機(jī)的計(jì)算要求。

J2ME的多數(shù)特征是從J2SE派生出來的。J2ME的某些特征如下:

(1)可移植性。

(2)跨不同產(chǎn)品的內(nèi)在的一致性。

(3)跨網(wǎng)絡(luò)的安全性。

(4)與J2SE平臺(tái)和J2EE平臺(tái)的兼容性。

開發(fā)無線應(yīng)用的另一種方法是通過無線應(yīng)用協(xié)議(Wireless Application Protocol)(WAP)。WAP是適應(yīng)于由Web協(xié)議(諸如TCP/IP和UDP)使用的幾種數(shù)據(jù)處理技術(shù)的一種特例。WAP應(yīng)用開發(fā)比較簡(jiǎn)單,因?yàn)樗赜昧爽F(xiàn)有的Web技術(shù)。WAP不是為使用HTML而設(shè)計(jì)的,盡管許多WAP網(wǎng)關(guān)可把HTML轉(zhuǎn)換為特定無線設(shè)備的數(shù)據(jù)。為生成動(dòng)態(tài)的WAP內(nèi)容,可使用Servlets和Java Server Pages(JSP)或無線置標(biāo)語(yǔ)言(Wireless Markup Language)(WML)。盡管WAP和J2ME是互補(bǔ)的技術(shù),但它們以不同的方式進(jìn)行操作。對(duì)于WAP的情形,移動(dòng)設(shè)備運(yùn)行一個(gè)訪問Intranet或Internet應(yīng)用的瀏覽器。移動(dòng)設(shè)備不包含任何其他的應(yīng)用。另一方面,J2ME應(yīng)用駐留在移動(dòng)設(shè)備上,用戶可得到這些應(yīng)用,即使個(gè)別沒有連接到網(wǎng)絡(luò)上。

1.2 J2ME的體系結(jié)構(gòu)

J2ME使用配置和簡(jiǎn)表定制Java運(yùn)行時(shí)的環(huán)境(JRE)。作為一個(gè)完整的JRE,J2ME由配置和簡(jiǎn)表組成,配置決定了使用的JVM,而簡(jiǎn)表通過添加特定于域的類來定義應(yīng)用程序。配置將基本運(yùn)行時(shí)環(huán)境定義為一組核心類和一個(gè)運(yùn)行在特定類型設(shè)備上的特定JVM。本書將在J2ME配置一章中詳細(xì)討論配置。

簡(jiǎn)表定義應(yīng)用程序;特定地,它向J2ME配置中添加特定于域的類,定義設(shè)備的某種作用。在本章1.6小節(jié)中將深入介紹簡(jiǎn)表。下面的圖1-1描述了不同的虛擬機(jī)、配置和簡(jiǎn)表之間的關(guān)系。它同時(shí)把J2SE API和它的Java虛擬機(jī)進(jìn)行了比較。雖然J2SE虛擬機(jī)通常被稱為一種JVM,但是J2ME虛擬機(jī)、KVM和CVM都是JVM的子集。KVM和CVM均可被看作是一種Java虛擬機(jī)——它們是J2SE JVM的壓縮版,并特定于J2ME。

圖1-1 不同的虛擬機(jī)、配置和簡(jiǎn)表之間的關(guān)系

1.2.1 配置概述

配置將基本運(yùn)行時(shí)環(huán)境定義為一組核心類和一個(gè)運(yùn)行在特定類型設(shè)備上的特定JVM。雖然還可能在將來定義其他的配置,但當(dāng)前J2ME存在兩種配置。

(1)連接限制設(shè)備配置(CLDC)

特別與KVM一起用于內(nèi)存有限的16位或32位設(shè)備。這是用于開發(fā)小型J2ME應(yīng)用程序的配置(虛擬機(jī))。(從開發(fā)的角度來看)它的大小限制讓它比CDC更有趣、更具挑戰(zhàn)性。CLDC同時(shí)還是用于開發(fā)繪圖工具應(yīng)用程序的配置。Palm電腦便是一個(gè)運(yùn)行小應(yīng)用程序的小型無線設(shè)備的示例。本書將在本章1.5小節(jié)中深入介紹CLDC。

(2)連接設(shè)備配置(CDC)

與C虛擬機(jī)(CVM)一起使用,用于要求內(nèi)存超過2 MB的32位體系結(jié)構(gòu)。因特網(wǎng)電視機(jī)頂盒便是這類設(shè)備的一個(gè)示例。稍后將在本章1.5.3小節(jié)中簡(jiǎn)要介紹CDC。

1.2.2 簡(jiǎn)表概述

簡(jiǎn)表定義了用戶的應(yīng)用程序所支持的設(shè)備類型,它向J2ME配置添加了特定于域的類來定義設(shè)備的某種作用。簡(jiǎn)表建立在配置的頂部。已經(jīng)為J2ME定義了兩種簡(jiǎn)表:KJava和移動(dòng)信息設(shè)備簡(jiǎn)表(MIDP),它們也被建立在CDLC上。這兩種簡(jiǎn)表適用于小型設(shè)備。有一種綱要簡(jiǎn)表,用戶可以在它的上面創(chuàng)建自己的簡(jiǎn)表,這種綱要簡(jiǎn)表也稱為基礎(chǔ)表,可供CDC使用。我們將在后面的章節(jié)中討論上述這些簡(jiǎn)表,還會(huì)使用KJava和MIDP建立一些示例應(yīng)用程序。

1.2.3 J2ME的目標(biāo)設(shè)備

使用CLDC開發(fā)的J2ME應(yīng)用程序的目標(biāo)設(shè)備通常具有以下特征:

(1)可供Java平臺(tái)使用的160 KB到512 KB的總內(nèi)存。

(2)功率有限,常常是電池供電。

(3)網(wǎng)絡(luò)連通性,常常是無線的、不一致的連接并且?guī)捰邢蕖?/p>

(4)用戶接口混亂,程度參差不齊;有時(shí)根本就沒有接口。

一些CLDC支持的設(shè)備,包括無線電話、尋呼機(jī)、主流個(gè)人數(shù)字助手(PDA),以及小型零售支付終端。

依照Sun Microsystems,CDC的目標(biāo)設(shè)備通常具有以下特征:

(1)使用32位處理器。

(2)2 MB或更多可供Java平臺(tái)使用的總內(nèi)存。

(3)設(shè)備要求的Java 2“藍(lán)皮書”虛擬機(jī)的全部功能。

(4)網(wǎng)絡(luò)連通性,常常是無線的、不一致的連接并且?guī)捰邢蕖?/p>

(5)用戶接口混亂,程度參差不齊;有時(shí)根本就沒有接口。

一些CDC支持的設(shè)備,包括常駐網(wǎng)關(guān)、智能電話和通訊器、PDA、管理器、家用電器、銷售網(wǎng)點(diǎn)終端以及汽車導(dǎo)航系統(tǒng)。

1.3 開發(fā)J2ME程序注意事項(xiàng)介紹

在本節(jié)中,首先介紹在為小型設(shè)備開發(fā)應(yīng)用程序時(shí)需要牢記的一些注意事項(xiàng),然后介紹在使用J2SE編譯J2ME應(yīng)用程序時(shí)調(diào)用編譯器的方法,最后將探究打包和部署,以及在這個(gè)過程中提前驗(yàn)證所扮演的角色。

1.3.1 設(shè)計(jì)開發(fā)小型設(shè)備應(yīng)用程序要注意的事項(xiàng)

為小型設(shè)備開發(fā)應(yīng)用程序,需要用戶在設(shè)計(jì)階段制定某種策略。最好是在開始編寫代碼之前,戰(zhàn)略性地為小型設(shè)備設(shè)計(jì)應(yīng)用程序。由于無法考慮到所有的“gotchas”,在開發(fā)應(yīng)用程序之前更正代碼是一件很痛苦的工作。下面是一些可以考慮的設(shè)計(jì)策略:

(1)保持程序簡(jiǎn)單。除去不必要的功能,如果可能的話,將它們做成獨(dú)立的、次要的應(yīng)用程序。

(2)程序越小越好。這一點(diǎn)對(duì)所有的開發(fā)者來說應(yīng)該是顯而易見的。越小的程序占用的設(shè)備內(nèi)存越少,并且花費(fèi)的安裝時(shí)間越少。可考慮將用戶的Java應(yīng)用程序打包,作為壓縮的Java檔案(jar)文件。

(3)運(yùn)行時(shí)占用最少的內(nèi)存。為盡可能減少運(yùn)行時(shí)占用的內(nèi)存,使用標(biāo)量類型代替對(duì)象類型。同時(shí),不依賴?yán)占绦颉S脩魬?yīng)該在使用完對(duì)象時(shí)將對(duì)象引用置空,這樣可有效管理內(nèi)存。另外一種減少運(yùn)行時(shí)所需內(nèi)存的方法是使用“惰性”實(shí)例,它僅在必需時(shí)才分配對(duì)象。其他一些減少小型設(shè)備上過量和峰值內(nèi)存使用的方法有快速釋放資源、重新使用對(duì)象以及避免異常。

1.3.2 設(shè)計(jì)開發(fā)移動(dòng)設(shè)備應(yīng)用程序的注意事項(xiàng)

開發(fā)移動(dòng)設(shè)備應(yīng)用程序的規(guī)則與前面提及的開發(fā)小型設(shè)備的相同:先設(shè)計(jì)再編碼。讓用戶檢查一下開發(fā)移動(dòng)設(shè)備應(yīng)用程序時(shí)可考慮的一些設(shè)計(jì)建議:

(1)讓服務(wù)器做大部分的工作。將計(jì)算性較強(qiáng)的任務(wù)放到服務(wù)器上,讓服務(wù)器為用戶做這些工作。讓移動(dòng)設(shè)備處理界面和最少的計(jì)算工作,而讓服務(wù)器做繁重的工作。當(dāng)然,用戶為其開發(fā)應(yīng)用程序的移動(dòng)設(shè)備對(duì)設(shè)備連接到服務(wù)器上的難易程度和頻率有重要影響。

(2)謹(jǐn)慎地選擇編程語(yǔ)言。J2ME仍然處于成長(zhǎng)期,可能還不是最好的選擇。根據(jù)用戶的需要,選擇其他的面向?qū)ο笳Z(yǔ)言,如C++,可能會(huì)更好。

1.3.3 性能注意事項(xiàng)

為性能而編碼。下面介紹一些以獲得最優(yōu)性能為目標(biāo)的編碼方法:

(1)使用局部變量。訪問局部變量比訪問類成員更快。

(2)避免字符串串聯(lián)。字符串串聯(lián)不僅會(huì)降低性能,而且會(huì)增加應(yīng)用程序的內(nèi)存峰值占用量。

(3)使用線程,避免同步。任何運(yùn)行時(shí)間超過1/10 s的操作都需要一個(gè)獨(dú)立的線程。避免同步同樣能提高性能。

(4)使用模型視圖控制器(MVC)分離模型。MVC將代碼中控制顯示的邏輯分離出來。

1.3.4 編譯注意事項(xiàng)

同其他的Java應(yīng)用程序一樣,用戶在打包和部署應(yīng)用程序之前要先進(jìn)行編譯。盡管有了J2ME,用戶仍然使用J2SE編譯器并且需要用適當(dāng)?shù)倪x項(xiàng)來進(jìn)行調(diào)用。用戶需要使用-bootclasspath選項(xiàng)來指示編譯器使用J2ME類,而不是J2SE類。不要在編譯器的CLASSPATH中設(shè)置配置類。這樣將導(dǎo)致運(yùn)行時(shí)錯(cuò)誤,因?yàn)椴还蹸LASSPATH中有什么,編譯器將首先自動(dòng)搜索J2SE的核心類。換句話說,編譯器將無法引用特定J2ME配置中缺少的類或方法,結(jié)果導(dǎo)致在嘗試運(yùn)行應(yīng)用程序時(shí)出現(xiàn)運(yùn)行錯(cuò)誤,如圖1-2所示。

圖1-2 編譯錯(cuò)誤

1.3.5 打包和部署注意事項(xiàng)

由于J2ME是為內(nèi)存有限的小型設(shè)備設(shè)計(jì)的。大部分常用的Java提前驗(yàn)證已經(jīng)從虛擬機(jī)中除去,以形成一個(gè)較小的覆蓋區(qū)域。結(jié)果,在配置之前提前驗(yàn)證J2ME應(yīng)用程序就很有必要。在運(yùn)行時(shí)會(huì)附加一個(gè)檢查以確保這個(gè)類在提前驗(yàn)證之后還沒有改變過。

如何嚴(yán)格執(zhí)行提前驗(yàn)證或者檢查類的正確性依靠的是工具包。CLDC提供一個(gè)稱為提前驗(yàn)證的命令行實(shí)用程序,它能夠進(jìn)行實(shí)際的驗(yàn)證并且可以把一些額外的信息插入到類文件中去。MIDP使用無線工具包,這種工具包提供一種GUI工具,也可從命令行運(yùn)行這種工具。

部署工作取決于用戶要部署的平臺(tái)。應(yīng)用程序必須以一種適合J2ME設(shè)備類型的格式進(jìn)行打包和配置,就如簡(jiǎn)表定義的那樣。

1.4 無線編程的新趨勢(shì)

世界逐漸地從有線網(wǎng)時(shí)代轉(zhuǎn)向無線網(wǎng)時(shí)代。用戶將不斷地看到連接無線網(wǎng)的小型設(shè)備彼此通信,類似于通過PC用有線網(wǎng)的方式進(jìn)行。這些設(shè)備包括手機(jī)、手持計(jì)算機(jī)、傳呼機(jī)、掌上OS(Palm OS)設(shè)備。所有這些設(shè)備將使用如J2ME這樣的平臺(tái)來運(yùn)行專門為這些手持設(shè)備開發(fā)的不同應(yīng)用軟件。

1.4.1 J2ME使能設(shè)備

J2ME正成為創(chuàng)建移動(dòng)設(shè)備、消費(fèi)電子產(chǎn)品,以及嵌入式設(shè)備的新應(yīng)用的最合適的平臺(tái)。J2ME體系結(jié)構(gòu)由支持各式各樣設(shè)備的不同的配置類型、特征和規(guī)格說明組成。CDC配置支持CVM,它是為消費(fèi)電子產(chǎn)品及嵌入式設(shè)備定制的JVM。這些設(shè)備有相當(dāng)于手持設(shè)備那樣較好的硬件資源。其基本特征由Java API組成。這種特征是CDC配置的組成部分,其組合將成為構(gòu)建未來消費(fèi)電子產(chǎn)品及嵌入式設(shè)備的技術(shù)。

MIDP是一組Java API。其特征是CLDC配置的組成部分,以創(chuàng)建客戶化的手持設(shè)備的應(yīng)用。使用J2ME技術(shù)的不同設(shè)備可廣義地分兩種類型:手持設(shè)備和消費(fèi)電子產(chǎn)品及嵌入式設(shè)備。手持設(shè)備利用CLDC配置運(yùn)行Java應(yīng)用。反之,消費(fèi)電子產(chǎn)品及嵌入式設(shè)備利用CDC配置運(yùn)行Java應(yīng)用。

手持設(shè)備有較少的內(nèi)存資源、較低的處理器速度和不規(guī)則的網(wǎng)絡(luò)連接。這種設(shè)備的例子包括個(gè)人數(shù)字助理(PDAs),蜂窩電話、基于Palm OS的設(shè)備和形成體(organizers)。

另一方面,消費(fèi)電子產(chǎn)品及嵌入式設(shè)備有大量的內(nèi)存、高的處理器速度、且總是與網(wǎng)絡(luò)連接。這種設(shè)備的例子包括機(jī)頂盒、Internet TV、屏幕電話和高端通信裝置。

提示

手持設(shè)備上可用的內(nèi)存一般范圍為32 KB到512 KB,常用的消費(fèi)電子產(chǎn)品及嵌入式設(shè)備的內(nèi)存能力在1 MB到10 MB之間。

1.4.2 J2ME使能設(shè)備的優(yōu)點(diǎn)

使用J2ME技術(shù),服務(wù)提供者可基于每種客戶設(shè)備的資源說明提供獨(dú)特的、特定于客戶的應(yīng)用。J2ME應(yīng)用可部署在各種各樣資源約束的設(shè)備上。只要設(shè)備是依從J2ME的,這可用于任何網(wǎng)絡(luò)和任何的平臺(tái)。J2ME對(duì)最終用戶也是有好處的。最終用戶可基于他們的需要直接下載應(yīng)用和產(chǎn)品到他們的移動(dòng)設(shè)備上。因此,用戶可不必為手機(jī)和其他的手持設(shè)備購(gòu)買預(yù)先安裝在設(shè)備上的應(yīng)用和產(chǎn)品。

提示

移動(dòng)設(shè)備部門的主要機(jī)構(gòu),如NTT DoCoMo、Inc.、LG Telecom和Nextel,已經(jīng)共同在3百萬以上的無線手持設(shè)備上部署了J2ME技術(shù)。移動(dòng)設(shè)備制造商,如Nokia、Motorola、Siemens、NEC、Sony、Samsung以及LG Electronics,已經(jīng)開始將運(yùn)輸設(shè)備和Java技術(shù)集成起來。

當(dāng)前,用J2ME創(chuàng)建的幾種移動(dòng)設(shè)備應(yīng)用正廣泛地用在無線設(shè)備上。這些移動(dòng)設(shè)備應(yīng)用的例子如下。

● 我的航行:客戶可以檢查個(gè)人的航行材料。例如,累計(jì)飛行距離及費(fèi)用償還圖,客戶可核對(duì)飛行材料和選擇用E-mail通報(bào)飛行材料。

● 我的天氣:向客戶提供有音樂背景的每天的天氣預(yù)報(bào)。此外,在下雨天時(shí)得到報(bào)警。

● 我的名人:可讓客戶觀看流行的名人網(wǎng)站中的消息。

1.4.3 服務(wù)器應(yīng)用和應(yīng)用門戶

J2ME的主要著眼點(diǎn)是在小而資源有限的設(shè)備上提供最終用戶的應(yīng)用,J2ME還包括其他兩種類型的應(yīng)用——服務(wù)器應(yīng)用和應(yīng)用門戶。

1. 服務(wù)器應(yīng)用

設(shè)計(jì)J2ME服務(wù)器應(yīng)用以幫助服務(wù)提供者提交更好的最終用戶應(yīng)用。服務(wù)器應(yīng)用在Web服務(wù)器上運(yùn)行,且易于在用戶設(shè)備上部署MIDlets。

提示

也可在非Java平臺(tái)上創(chuàng)建服務(wù)器應(yīng)用。

服務(wù)器應(yīng)用的典型例子是包括:

● AppStream

● 4thpass Mobile Application Server(MAS)

AppStream是一種流應(yīng)用(application streaming)使能的服務(wù)器應(yīng)用,它類似于流媒體(media streaming)。一般情況下,用戶下載文件時(shí),在文件完全下載好之前不可能打開文件和運(yùn)行它。但流媒體的情況下,用戶不必完全下載好音頻或視頻文件就可播放它,甚至在下載時(shí)就可開始播放文件。類似地,用流應(yīng)用還可在下載時(shí)就可運(yùn)行應(yīng)用。這對(duì)于由慢速網(wǎng)絡(luò)下載應(yīng)用到內(nèi)存和速度有限的設(shè)備上的用戶來說特別有意義。稱為AppStream的公司提供了這種應(yīng)用。

4thpass Mobile Application Server(MAS)是一種服務(wù)器應(yīng)用,它有助于減少在速度較慢的無線網(wǎng)絡(luò)上下載的時(shí)間。稱為4thpass的公司開發(fā)了這種應(yīng)用。

2. 應(yīng)用門戶

J2ME應(yīng)用門戶是致力于以MIDlets的形式提供最終用戶應(yīng)用的Web站點(diǎn)。這些MIDlets按他們的應(yīng)用定價(jià)。某些MIDlets在Web上是免費(fèi)的。應(yīng)用門戶能使移動(dòng)設(shè)備用戶直接下載MIDlets到他們的設(shè)備上,減少用戶對(duì)提供這些應(yīng)用的服務(wù)提供者的依賴。這些門戶也有助于軟件廠商把他們的產(chǎn)品(MIDlets)直接銷售給用戶。

創(chuàng)建MIDlets的任何人可在應(yīng)用門戶上張貼它。用戶可從這些門戶中把這些MIDlets下載到他們的移動(dòng)設(shè)備。Sun的官方網(wǎng)站(http://java.sun.com)提供了與能下載MIDlets的某些門戶的鏈接。

提示

讀者可通過http://midlet.org訪問midlet.org,通過http://jars.com訪問jars.com。

1.4.4 J2ME與其他Java技術(shù)的匯集

J2ME之前,Sun公司引入過一些技術(shù),尤其是對(duì)于小型的手持設(shè)備。由于J2ME的到來自然地期望Sun能把這些技術(shù)與J2ME匯集起來以拓寬J2ME可提供的應(yīng)用范圍。

J2ME開始之前,Sun已經(jīng)引入了稱為個(gè)人Java的技術(shù)(PersonalJava)。在普通家用電子裝置上使用PersonalJava能使它們的功能自動(dòng)化。假定J2ME是PersonalJava自然的后繼者。但PersonalJava仍然在不適用于兩類J2ME配置(CDC and CLDC)的小裝置上使用。這些小裝置需要它們自己的特征。Sun現(xiàn)在決定把這些設(shè)備包括在受CDC配置影響的基礎(chǔ)特征(Foundation profile)中。Sun通過使PersonalJava與J2ME的集成來替代PersonalJava。

Sun開發(fā)的JINI作為不同平臺(tái)下的不同網(wǎng)絡(luò)和作業(yè)的集成系統(tǒng)的一種中間解決方案。在JINI的幫助下,任何類型的設(shè)備(如打印機(jī)、揚(yáng)聲器、存儲(chǔ)設(shè)備等)可插入到網(wǎng)絡(luò)。用戶可立即看到網(wǎng)絡(luò)中設(shè)備并使用它。新插入到網(wǎng)絡(luò)的設(shè)備將在網(wǎng)絡(luò)設(shè)備注冊(cè)表中定義它自身。

提示

JINI替代了使用稱為Device Drivers的軟件,使用它可把關(guān)于網(wǎng)上新加入的硬件通知操作系統(tǒng)。

使用JINI時(shí),操作系統(tǒng)用網(wǎng)絡(luò)設(shè)備注冊(cè)表跟蹤新加入的硬件。目前,設(shè)計(jì)的JINI僅在J2SE和J2EE平臺(tái)下工作。JINI對(duì)于解決與嵌入系統(tǒng)的連接問題十分有效。因此,JINI也十分適宜在J2ME平臺(tái)下工作。

Web服務(wù)能使組織獨(dú)立于基礎(chǔ)網(wǎng)絡(luò)和任何一端上的平臺(tái)訪問Internet上的服務(wù)和應(yīng)用。用數(shù)據(jù)格式和諸如XML和簡(jiǎn)單對(duì)象訪問協(xié)議(SOAP)這樣的協(xié)議創(chuàng)建這些Web服務(wù)。通過J2ME、J2EE和XML的集成,它可在J2ME依從的移動(dòng)設(shè)備上訪問存儲(chǔ)在J2EE應(yīng)用服務(wù)器中的Web服務(wù)。

1.4.5 Java卡和J2ME靈巧卡的演化

靈巧卡在物理外形上類似于信用卡。但靈巧卡包含一個(gè)小的計(jì)算機(jī)芯片,與信用卡相比它們是動(dòng)態(tài)的。靈巧卡可具有相當(dāng)于電子現(xiàn)金的功能。電子現(xiàn)金允許用戶支付交易的現(xiàn)金而不必通過銀行賬戶。

Java卡是能夠執(zhí)行Java程序的靈巧卡。它們主要用于處理數(shù)據(jù)的訂戶標(biāo)識(shí)模塊(SIM)卡。這是通過連接卡到手機(jī)來做。Java卡類似于信用卡,但可發(fā)送、接收和處理數(shù)據(jù)。這是通過卡片讀入機(jī)將Java卡連接到計(jì)算機(jī)上來做的。

Java Card相對(duì)原先的靈巧卡來說有以下優(yōu)點(diǎn):

● 可互操作性

● 安全性

● 能運(yùn)行多種應(yīng)用

● 靈活性

Java卡提供了可互操作性,因?yàn)橛肑ava技術(shù)開發(fā)的任何Java Applet將在Java卡中起作用,不管其基礎(chǔ)硬件是什么。此外,Java卡具有與Java編程語(yǔ)言那樣的安全和靈活性。Java卡能提供多種應(yīng)用,因?yàn)樗舾蓚€(gè)Applets,每個(gè)Applets提供了不同的應(yīng)用。Java卡又是動(dòng)態(tài)的,因?yàn)榉?wù)提供者能按照用戶的需要加入和除去Java卡提供的應(yīng)用。

靈巧卡與SIM卡一樣主要在手機(jī)中使用。以前,手機(jī)主要用于聲音傳遞。但隨著Java卡的到來,服務(wù)提供者現(xiàn)在能提供各種各樣的新服務(wù),諸如:網(wǎng)上銀行、通過電子商務(wù)的貿(mào)易和訪問Web站點(diǎn),把手機(jī)信息轉(zhuǎn)到PC機(jī)上。

提示

Java卡應(yīng)用的一個(gè)典型例子是美國(guó)國(guó)防部提供的公共訪問卡(Common Access Card)。此卡可以使軍事人員和其他授權(quán)的用戶訪問軍用設(shè)施和其他敏感的資源。

Sun沒有提出在Java卡上實(shí)現(xiàn)J2ME技術(shù)的任何計(jì)劃。但J2ME提供了創(chuàng)建Java卡應(yīng)用的理想平臺(tái)。目前,Java卡用Java卡虛擬機(jī)(JCVM)執(zhí)行程序。如果J2ME能進(jìn)入這種想象的話,那么這個(gè)卡將必須適應(yīng)KVM執(zhí)行J2ME MIDlets。但如果KVM不能在Java卡環(huán)境中運(yùn)行的話,Sun將可能必須創(chuàng)建CLDC配置下的Java卡的新特征。

1.4.6 J2ME在GADGET編程中的作用

Sun開發(fā)Java的目的是在家用電器中使用Java,以使這些設(shè)備更靈巧和更有交互性。用J2ME和小裝置編程的概念,使Sun在實(shí)現(xiàn)這個(gè)目標(biāo)上更接近了。

使用JVM的嵌入式公共電子小裝置使這些小裝置能執(zhí)行Java程序。這是所謂的小裝置編程(gadget programming)。小裝置編程使用戶能從單個(gè)測(cè)點(diǎn)控制不同的小裝置,提供遠(yuǎn)程控制這些小裝置的機(jī)制。小裝置編程也使這些設(shè)備可交互和自動(dòng)化。這些小裝置編程可對(duì)來自計(jì)算機(jī)的指令做出應(yīng)答。例如,有些烘箱能直接接收來自TV的烹調(diào)指令而不要用戶干預(yù)。這是直接的小裝置到小裝置的交互。類似地,可為基于用戶的需要為其他的器具(如空調(diào)、音頻和視頻系統(tǒng)、洗衣機(jī)、真空洗塵器、電冰箱等)構(gòu)建應(yīng)用。所有這些小裝置可連接到中央服務(wù)器。這種服務(wù)器將包含Java程序,控制這些小裝置的操作,使它們高度自動(dòng)化和可交互,從而創(chuàng)建“靈巧家用設(shè)備(smart home)”。靈巧家用設(shè)備的主要特點(diǎn)是可連接到外部網(wǎng)絡(luò)(如Internet),和從遠(yuǎn)程站點(diǎn)控制它們。現(xiàn)在,還沒有使用J2ME技術(shù)的嵌入式小裝置。但J2ME已經(jīng)證明了它在小型無線設(shè)備中價(jià)值。因此,可以預(yù)期它將成為未來小裝置編程的主流技術(shù)。

提示

Consumer Electronic Show 2000陳列了用Java技術(shù)創(chuàng)建的靈巧家用設(shè)備。Sun稱它為.com Home。.com Home由一些小裝置組成。例如,配有Web面板的冰箱以瀏覽網(wǎng)絡(luò),可編程的洗滌器在出現(xiàn)故障事件時(shí)可自動(dòng)地通知制造廠商。這種靈巧家用設(shè)備也能使咖啡壺可自動(dòng)地通過Internet更新其功能。

小裝置編程的另一個(gè)例子是建立自動(dòng)汽油泵中使用J2ME技術(shù)。未來的汽油泵將與賬戶系統(tǒng)結(jié)合起來,這樣人們就不需要管理它們。汽油泵也將提供達(dá)到不同目的地的道路圖。假如汽油泵配有Java驅(qū)動(dòng)的系統(tǒng),它也有可能直接和汽車交互,然后對(duì)汽車中可能的缺陷向用戶提出警告,并提醒用戶維修細(xì)節(jié)。也可能在Java卡中存儲(chǔ)這種維修細(xì)節(jié)。這將保證:當(dāng)用戶要支付而猛打卡時(shí),該汽油泵回自動(dòng)地告訴用戶關(guān)于需要注意的問題。

提示

GM、Ford、BMW和Fiat等汽車制造商已經(jīng)構(gòu)造了Java驅(qū)動(dòng)系統(tǒng)的車輛原型,他們提出這種車輛的行駛版本僅僅是時(shí)間問題。

1.4.7 用J2ME的娛樂軟件編程

軟件市場(chǎng)中視頻娛樂業(yè)是爭(zhēng)錢最多的產(chǎn)業(yè)之一。現(xiàn)在市場(chǎng)的主要游戲者已認(rèn)識(shí)到這個(gè)等待開拓的巨大的、未觸及的市場(chǎng),并已逐漸把注意力轉(zhuǎn)向生產(chǎn)移動(dòng)設(shè)備的娛樂軟件。軟件廠商和移動(dòng)設(shè)備制造商正在聯(lián)手提供移動(dòng)設(shè)備的娛樂軟件。

提示

這種聯(lián)手的例子包括娛樂廠商THQ Inc和移動(dòng)設(shè)備制造商Sony Ericsson之間的聯(lián)合,另一個(gè)例子是娛樂廠商Sega和移動(dòng)設(shè)備制造商Motorola之間的聯(lián)合。按照這種聯(lián)合,娛樂廠商將創(chuàng)建只能在他們聯(lián)合方制造的移動(dòng)設(shè)備上運(yùn)行的娛樂程序。

目前,世界上有6億以上的手機(jī)用戶,而且用戶的數(shù)目正以指數(shù)速度增長(zhǎng)。這就導(dǎo)致了開發(fā)專為手機(jī)而設(shè)計(jì)的全新的娛樂。盡管在100 ×100 像素屏幕上提供圖形豐富的娛樂是不容易的,但手機(jī)娛樂相比桌面視頻娛樂有它的優(yōu)點(diǎn)。它們是可攜帶的,因此只要用戶帶上移動(dòng)設(shè)備,就可在任何地方播放。預(yù)期J2ME是移動(dòng)設(shè)備娛樂軟件的核心。用J2ME開發(fā)移動(dòng)設(shè)備的娛樂是簡(jiǎn)單而容易的。這些娛樂增加了設(shè)備的價(jià)值和制造商的吸引力。創(chuàng)建計(jì)算機(jī)和控制臺(tái)的視頻娛樂涉及到藝術(shù)家和編程員,要花費(fèi)大量的人力,這會(huì)引起巨大的開銷。而另一方面,J2ME提供了不可思議的創(chuàng)建娛樂的容易環(huán)境。幾種商標(biāo)的J2ME使能的電話包含這樣的API,可讓用戶訪問通常手機(jī)不能提供的特殊功能。包含這種API手機(jī)的例子包括Motorola和Nokia制造的手機(jī)。這些制造商已創(chuàng)建了可在娛樂中有音頻、動(dòng)畫、及更好圖形的娛樂API。使用J2ME平臺(tái)的另一個(gè)主要優(yōu)點(diǎn)是在其他平臺(tái)上運(yùn)行的現(xiàn)有的娛樂可容易地移植到這個(gè)平臺(tái)。

當(dāng)前,J2ME有兩種規(guī)格說明用于娛樂編程和多媒體應(yīng)用:

● Gaming API

● Mobile Media API

Gaming API規(guī)格說明是用于建立使用CDC配置設(shè)備的娛樂。用Mobile Media API訪問多媒體內(nèi)容。

Sun當(dāng)前正在從事新的API,移動(dòng)3D圖形(Mobile 3D Graphics)API,將它包含在CLDC配置中。這種API將在MIDP中提供選項(xiàng)包,將極大地改善3D外觀、圖形、J2ME中娛樂的活躍特征。通過使用這種API,開發(fā)者將能為移動(dòng)設(shè)備創(chuàng)建圖形豐富的娛樂。此外,這種API也將使應(yīng)用開發(fā)者創(chuàng)建栩栩如生的消息和類似于桌面工作站中的屏幕保護(hù)程序。

Mobile 3D Graphics API具有以下特點(diǎn):

● 有助于創(chuàng)建各種移動(dòng)應(yīng)用的3D圖像。

● 占有最少的設(shè)備資源,因此可在任何手持設(shè)備中使用。

● 用這種API創(chuàng)建的任何3D應(yīng)用,不管簡(jiǎn)單的或高級(jí)的,都可在移動(dòng)設(shè)備上運(yùn)行。

提示

Sun的J2ME Wireless Toolkit帶有娛樂的源代碼。例如,TilePuzzle、WormGame、PushPuzzle、Snake、Sokoban、Pong、Star Cruiser,以及Tile Sliding游戲。

Sun也正在開發(fā)新的虛擬機(jī),它可大大地改進(jìn)現(xiàn)在用的KVM的性能。這個(gè)新的虛擬機(jī)將使3D圖形應(yīng)用和運(yùn)行在移動(dòng)設(shè)備上的其他的復(fù)雜應(yīng)用大大地前進(jìn)一步,且消耗更少的內(nèi)存和電池能量。

1.4.8 J2ME與多媒體的匯集

多媒體內(nèi)容(如音頻和視頻文件)即使是壓縮的形式也要消耗大量的內(nèi)存。因此,對(duì)于內(nèi)存能力差和低的處理器速度為特征的J2ME設(shè)備來說,把它與多媒體鏈接起來是很不合理的。但事實(shí)上服務(wù)提供者正在選擇可能的J2ME通過手機(jī)提交多媒體內(nèi)容。

● 移動(dòng)設(shè)備的視頻:PacketVideo的公司開發(fā)的一個(gè)軟件,允許在無線網(wǎng)絡(luò)上傳輸視頻流。移動(dòng)服務(wù)提供者使用這個(gè)軟件把新聞剪輯和影片預(yù)告?zhèn)鬏數(shù)绞謾C(jī)。正在構(gòu)建的稱為PacketVideo的軟件使用了視頻的MPEG-4標(biāo)準(zhǔn),并使用J2ME平臺(tái)。

● 移動(dòng)設(shè)備的音頻:音頻文件以MP3格式被數(shù)字化地存儲(chǔ)以使內(nèi)存的需求最少。MP3格式與J2ME技術(shù)一起可把這種文件傳輸?shù)揭苿?dòng)設(shè)備,現(xiàn)在,用戶可把音頻內(nèi)容下載到諸如:MP3播放機(jī)、手機(jī),以及傳呼機(jī)之類手持設(shè)備上,在無線網(wǎng)絡(luò)上提供這種功能的前沿廠商是稱為Sensate的公司。Sensate已開發(fā)了稱為AoIP Wireless Media Server的應(yīng)用,可使用戶下載音頻內(nèi)容到手持設(shè)備上。此應(yīng)用需要每個(gè)用戶建立與客戶的連接以下載音頻文件,采用J2ME技術(shù)開發(fā)。

1.5 J2ME配置

正如前面所介紹的,配置將基本運(yùn)行時(shí)環(huán)境定義為一套核心類和一個(gè)運(yùn)行在特定類型設(shè)備上的特定的JVM。讀者也可以學(xué)到J2ME的兩種配置類型是CLDC和CDC。

Sun提供的J2ME配置是適合不同層次的市場(chǎng)需求的,CLDC適合于小型設(shè)備,而CDC適合于大型設(shè)備。J2ME環(huán)境可以被動(dòng)態(tài)地配置為提供運(yùn)行應(yīng)用程序所需要的環(huán)境,而不用考慮是否為設(shè)備提供了運(yùn)行該應(yīng)用程序所需的所有Java技術(shù)庫(kù)。核心平臺(tái)接收應(yīng)用程序代碼和庫(kù)。運(yùn)行在網(wǎng)絡(luò)上的服務(wù)器軟件執(zhí)行配置工作。CDC主要用于具有網(wǎng)絡(luò)連接性的高端消費(fèi)者設(shè)備。這些設(shè)備包括機(jī)頂盒、Internet TV,以及汽車導(dǎo)航系統(tǒng)。

提示

機(jī)頂盒是一種能使電視機(jī)作為與Internet用戶接口的設(shè)備,也能檢索數(shù)字電視(DTV)廣播。

CDC支持以下的Java包如表1-1所示。

表1-1 CDC支持的Java包

注意

J2ME應(yīng)用不可訪問定制包。

CLDC是處理能力比高檔消費(fèi)者設(shè)備低的設(shè)備。使用CLDC的某些常用設(shè)備是手機(jī)、私人記事器(personal organizers)和傳呼機(jī)。

下面將介紹有關(guān)CLDC和CDC的更多知識(shí)以及與它們關(guān)聯(lián)的簡(jiǎn)表。

1.5.1 連接限制設(shè)備配置(CLDC)

CLDC是由Java Community Process創(chuàng)建的。正如Sun Microsystems的Web站點(diǎn)所定義的那樣,它的標(biāo)準(zhǔn)是:“輕便、覆蓋區(qū)域最小的Java構(gòu)建塊,適合小型的、有資源限制的設(shè)備”。

J2ME CLDC配置是為將在業(yè)界定義的簡(jiǎn)表中使用的一個(gè)虛擬機(jī)和一套核心庫(kù)準(zhǔn)備的。正如前面提及的,一個(gè)簡(jiǎn)表通過在基本J2ME配置頂部提供特定于域的類來為特定的設(shè)備定義應(yīng)用程序。K虛擬機(jī)(KVM)、虛擬機(jī)的CLDC的參考執(zhí)行和它的KJava簡(jiǎn)表運(yùn)行在CLDC的頂部。

CLDC簡(jiǎn)要描述了高度限制設(shè)備上每個(gè)J2ME執(zhí)行所要求的一套最基本的庫(kù)和Java虛擬機(jī)特征。CLDC主要面向那些網(wǎng)絡(luò)連接速度慢、能源有限(經(jīng)常是電池供電)、具有大于等于128 KB的穩(wěn)定內(nèi)存,以及大于等于32 KB的不穩(wěn)定內(nèi)存的設(shè)備。不穩(wěn)定內(nèi)存是不持久的并且沒有寫保護(hù),這意味著如果關(guān)掉設(shè)備,內(nèi)存中的內(nèi)容將全部丟失。而穩(wěn)定內(nèi)存中的內(nèi)容是持久的,并且有寫保護(hù)。CLDC設(shè)備使用穩(wěn)定內(nèi)存來存儲(chǔ)運(yùn)行時(shí)的庫(kù)和KVM,或存儲(chǔ)為某個(gè)特殊設(shè)備創(chuàng)建的另一個(gè)虛擬機(jī)。不穩(wěn)定內(nèi)存被用來分配運(yùn)行時(shí)的內(nèi)存。

J2SE API不適用于手持設(shè)備,因?yàn)樗鼈冃枰罅康膬?nèi)存。因此,CLDC庫(kù)API中不包括所有的J2SE API。不同種類的CLDE庫(kù)API如下:

CLDE庫(kù)包含J2SE API的子集類。這些J2SE-特定的類設(shè)置在java.lang、java.io和java.util包中。表1-2列出了一些從這些包中繼承過來的類。

表1-2 從J2SE包中繼承的類

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

表1-3 javax.microedition.io包的一部分類

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

表1-4 java.lang和java.util之類包的一些類

提示

在某些情況下,如J2ME中那樣使用J2SE包,例如,java.util和java.io包。但由于資源的制約,只是某些J2SE包的一個(gè)子集,如java.lang所使用的那樣。其中有些包,如微編輯包,則是為J2ME全部重寫過的。

1.5.2 CLDC要求

CLDC定義了下列要求:

● 完整的Java語(yǔ)言支持(除浮點(diǎn)支持、最終定案和錯(cuò)誤處理之外)。

● 完整的JVM支持。

● CLDC的安全性。

● 有限國(guó)際化的支持。

● 繼承類:所有不針對(duì)CLDC的類都必須是J2SE 1.3類的子類。

● 針對(duì)CLDC的類都在名為javax.microedition的軟件包和它的子包中。

除javax.microedition軟件包以外,CLDC API還由J2SE的子集java.io、java.lang以及java.util等軟件包組成。

1.5.3 CLDC與CDC的比較

圖1-3描述了CDC和CLDC之間的關(guān)系,同時(shí)也揭示了它們與整個(gè)J2SE API系統(tǒng)的關(guān)系。正如前面所說,CDC是加上一些額外類的J2SE的子集,讀者也可以看到CLDC是CDC的子集。

圖1-3 CLDC與CDC的比較

1.6 J2ME簡(jiǎn)表

一個(gè)簡(jiǎn)表定義了受支持設(shè)備的類型。例如,移動(dòng)信息設(shè)備簡(jiǎn)表(MIDP),定義了蜂窩電話的類。它把一些特定于域的類加入J2ME配置中來定義對(duì)類似設(shè)備的使用。已經(jīng)為J2ME定義了兩個(gè)簡(jiǎn)表:KJava和MIDP。它們都構(gòu)建在CLDC之上。KJava和MIDP都和CLDC及小型設(shè)備相關(guān)聯(lián)。

簡(jiǎn)表被構(gòu)建在配置的頂部。由于簡(jiǎn)表是特定于運(yùn)行應(yīng)用程序的設(shè)備的大小(內(nèi)存的數(shù)量),所以,某個(gè)簡(jiǎn)表是與某種特定的配置相關(guān)聯(lián)的。

在綱要簡(jiǎn)表上,用戶可以創(chuàng)建自己的簡(jiǎn)表,這種綱要簡(jiǎn)表也稱為基礎(chǔ)表,它對(duì)于CDC也是可用的。然而,在本書中,將只介紹建立在CLDC上的KJava和MIDP簡(jiǎn)表。

1.6.1 KJava簡(jiǎn)表

KJava是歸Sun公司所有的簡(jiǎn)表,它包含KJava API。KJava簡(jiǎn)表建立在CLDC配置的頂部。KJava虛擬機(jī)可以像標(biāo)準(zhǔn)的J2SE虛擬機(jī)那樣接受相同的字節(jié)代碼和類文件格式。

KJava包含一個(gè)特定于Sun的、運(yùn)行在Palm操作系統(tǒng)上的API。這個(gè)KJava API和J2SE抽象視窗工具包(AWT)有很多地方都是相同的。然而,由于它不是一個(gè)標(biāo)準(zhǔn)的J2ME軟件包,它的主軟件包是com.sun.kjava。在第10 章中開發(fā)一些示例應(yīng)用程序時(shí)會(huì)介紹更多關(guān)于KJava API的知識(shí)。

1.6.2 MIDP簡(jiǎn)表

MIDP適合諸如蜂窩電話和尋呼機(jī)等移動(dòng)設(shè)備。MIDP和KJava一樣,也是建立在CLDC之上的,并且提供一個(gè)標(biāo)準(zhǔn)的運(yùn)行時(shí)環(huán)境,允許在終端用戶設(shè)備上動(dòng)態(tài)地部署新的應(yīng)用程序和服務(wù)。

MIDP是一個(gè)公共的、為移動(dòng)設(shè)備設(shè)計(jì)的工業(yè)標(biāo)準(zhǔn)簡(jiǎn)表,它不依賴某個(gè)特定的商家。對(duì)于移動(dòng)應(yīng)用程序開發(fā)來說,它是一個(gè)完整的、受支持的基礎(chǔ)。

MIDP包含一些附加的庫(kù),它們?yōu)榕c用戶界面和數(shù)據(jù)庫(kù)的交互提供了Java API。此外,這些Java API提出了諸如應(yīng)用生命周期和特定設(shè)備聯(lián)網(wǎng)之類的問題。用戶可用MIDP下的API來創(chuàng)建各種不同的應(yīng)用,如消費(fèi)者應(yīng)用和游戲軟件等。MIDP應(yīng)用稱為MIDlets,表1-5中描述了不同的MIDP包。

表1-5 MIDP包的部分類

注意

屬于移動(dòng)信息設(shè)備分類的PDA特征,仍處于它的構(gòu)造階段。

在移動(dòng)信息設(shè)備(如手機(jī)和傳呼機(jī))中使用的MIDP有以下特點(diǎn):

● 屏幕的最低大小為96 ×54像素

● 1位顯示深度

● 輸入設(shè)備,如:鍵盤或觸屏

● 關(guān)于MIDP部件,最少128 KB非易失內(nèi)存

● 雙向無限可連接性

此外,MIDP在低端處理器上運(yùn)行,創(chuàng)建最少的無用信息。在J2ME中,CLDC與MIDP結(jié)合形成了綜合的運(yùn)行時(shí)環(huán)境。系統(tǒng)級(jí)服務(wù)的接口是由其配置,CLDC提供,而應(yīng)用級(jí)服務(wù)的接口是由特征MIDP提供。

注釋

用戶可控制顯示的像素,用“位”來指出顏色或灰度級(jí)。1位顯示移位:1個(gè)像素使用1位。

1.6.3 MIDP取代KJava

正如在前面的1.6.1小節(jié)中提及的,KJava是Sun公司所擁有的一個(gè)API。它不作為一種完整的、功能齊全的簡(jiǎn)表,而是作為一種示范,示范簡(jiǎn)表如何與CLDC一起工作。根據(jù)CLDC發(fā)行說明(其中包含CLDC下載版本)。

在軟件包c(diǎn)om.sun.kjava中提供的GUI類不是連接限制設(shè)備配置CLDC的一部分。Java 2平臺(tái)袖珍版的正式GUI類,將通過Java Community Process分別定義并被包含進(jìn)J2ME簡(jiǎn)表中。

不管這個(gè)事實(shí)存在與否,KJava簡(jiǎn)表已經(jīng)被早期的采用者廣泛使用了。在2001年JavaOne的開發(fā)商會(huì)議上,Sun公司宣稱早期Palm操作系統(tǒng)的MIDP可用性(MID簡(jiǎn)表的最初發(fā)行版焦點(diǎn)主要集中在無線電話上)。Palm操作系統(tǒng)MIDP的規(guī)格是由Java Community Process(JCP)定義的。因此,它是獨(dú)立于供應(yīng)商的。當(dāng)前眾多限制中的一個(gè)——它將隨時(shí)間消失——就是Palm操作系統(tǒng)的MIDP需要最新的Palm操作系統(tǒng)——V3.5。

在作者寫這本書的同時(shí),Palm操作系統(tǒng)的MIDP的規(guī)范仍然在隨著JCP不斷發(fā)展,其細(xì)節(jié)也會(huì)隨時(shí)改變。盡管目前還無法確定其發(fā)行日期,但是規(guī)范一旦出臺(tái),將必然減少對(duì)KJava的需求。

1.7 J2ME無線工具箱

J2EE和J2SE平臺(tái)用于創(chuàng)建在高速、大容量存儲(chǔ)設(shè)備上運(yùn)行的應(yīng)用。對(duì)于為這種設(shè)備寫的Java應(yīng)用由使用大量?jī)?nèi)存的JVM編譯。但與JVM相比,KVM占有較少的內(nèi)存,嚴(yán)重地限制了它的能力。移動(dòng)應(yīng)用中的任何虛擬機(jī)必須能夠識(shí)別和拒絕無效的類文件。KVM的限制之一是它不可能執(zhí)行類文件的檢驗(yàn)。要求這些檢驗(yàn)過濾不屬于CLDC配置的類文件。因此,需要一種機(jī)制能在KVM之外執(zhí)行類文件檢驗(yàn),這由J2ME無線工具箱完成。這個(gè)工具箱是Sun公司用來構(gòu)建和測(cè)試MIDlet的一組工具。

創(chuàng)建MIDlet之后,必須測(cè)試它以保證應(yīng)用能成功地運(yùn)行。如果開發(fā)的MIDlet要在不同的移動(dòng)設(shè)備上運(yùn)行,必須在每個(gè)這些設(shè)備中測(cè)試它。J2ME無線工具箱提供了模擬這些環(huán)境和測(cè)試應(yīng)用的一種機(jī)制。這些被模擬的測(cè)試消除了在特定設(shè)備中MIDlet發(fā)生故障的可能性。

1.7.1 J2ME無線工具箱的結(jié)構(gòu)

J2ME無線工具箱由兩個(gè)部件組成:

● 字節(jié)代碼檢驗(yàn)器(Bytecode verifier)

● J2ME仿真器(emulator)

此外,由Motorola發(fā)布的某些J2ME無線工具箱(如J2ME的SDK),還包含稱為配置編輯器(Configuration editor)的附加部件。

1. 字節(jié)代碼檢驗(yàn)器

如前面提到的,J2ME MIDlet必須遵循CLDC配置。J2ME不支持J2SE中可用的所有的類文件。CLDC配置進(jìn)一步限制了這些類文件的使用。在這種情形下,虛擬機(jī)必須能夠定位并拒絕來自MIDlet的所有的無效類文件,只保留有效的類文件。KVM不可能執(zhí)行這些任務(wù)。因?yàn)椋褂米止?jié)代碼檢驗(yàn)器。過濾無效類的過程稱為預(yù)檢驗(yàn)。在MIDlet的開發(fā)階段執(zhí)行預(yù)檢驗(yàn)過程。然后準(zhǔn)備把被檢驗(yàn)的MIDlet作為應(yīng)用被裝入。字節(jié)代碼檢驗(yàn)器的優(yōu)點(diǎn)是:它減少了KVM的工作負(fù)荷。這可讓KVM完全集中于編譯過程而不必檢查無效的類文件。歸結(jié)起來,字節(jié)代碼檢驗(yàn)器用來定位并拒絕來自MIDlet的所有無效的類文件,只保留有效的類文件。過濾無效類的類文件的過程稱為預(yù)檢驗(yàn)。減少了KVM的工作負(fù)荷,可讓KVM完全集中于編譯過程而不必檢查無效的類文件。

在預(yù)檢驗(yàn)過程中,.class文件被轉(zhuǎn)換為.jar文件。MIDlet被編譯之后,以.class擴(kuò)展的方式存儲(chǔ)它,這類似于Java字節(jié)代碼文件。下一步是預(yù)檢驗(yàn)過程,此后,.class文件被轉(zhuǎn)換為.jar文件。預(yù)檢測(cè)過程如圖1-4所示。

圖1-4 預(yù)檢測(cè)過程

除了MIDlet類和其他的支持類之外,MIDlet JAR文件還包含以下元素。

● MIDlet:MIDlet類文件。

● Manifest文件:又稱為應(yīng)用描述符,這個(gè)文件描述了MIDlets,諸如:MIDlet的名、廠商名,等等。用擴(kuò)展jad來保存此文件。

● 其他資源:這些資源包括:MIDlets使用的圖像文件和聲音文件。

單個(gè)JAR文件可以包含一個(gè)以上的MIDlet。若干個(gè)MIDlets一起形成了MIDlet套件。應(yīng)用描述符提供了由套件訪問特定MIDlet所需的信息。這種應(yīng)用描述符作為JAR文件內(nèi)的.jad文件存儲(chǔ)。存儲(chǔ)在JAR文件中的其他資源包括聲音和圖像文件。

2. J2ME仿真器

在準(zhǔn)備部署MIDlet之前,必須在真實(shí)的情況下測(cè)試它。這涉及到測(cè)試創(chuàng)建它的每個(gè)設(shè)備中的MIDlet。用J2ME仿真器來執(zhí)行此測(cè)試。該仿真器提供了在PC上測(cè)試代碼的有效的被模擬的環(huán)境。當(dāng)執(zhí)行此模擬時(shí),設(shè)備的圖像出現(xiàn)在屏幕上,應(yīng)用的執(zhí)行完全像在特定設(shè)備上執(zhí)行的那樣。用戶可通過鼠標(biāo)點(diǎn)擊設(shè)備上的不同按鈕來與設(shè)備交互。

J2ME無線工具箱能模擬以下設(shè)備的環(huán)境:

● DefaultColorPhone

● DefaultGrayPhone

● MinimumPhone

● Motorola i85s

● PalmOS_Device

● RIMJavaHand-held

圖1-5 描繪了J2ME仿真器屏幕,這在測(cè)試游戲軟件時(shí)出現(xiàn)在3 種不同的移動(dòng)設(shè)備(DefaultGrayPhone、RIMJavaHand-held和Motorola i85s)上的MIDlet。

圖1-5 不同的仿真器

J2ME仿真器具有以下優(yōu)點(diǎn):

● 幫助用戶在模擬的環(huán)境中重復(fù)地運(yùn)行MIDlet直到確定錯(cuò)誤為止。

● 提供讓用戶可在不同的設(shè)備上測(cè)試運(yùn)行MIDlets單個(gè)接口。

● 分析MIDlet的特定方面,如:無用單元收集和裝入類文件。

盡管用戶可認(rèn)為J2ME仿真器是一個(gè)完整的解決方案提供者,但它有一些限制。仿真器不能以確實(shí)的精度來測(cè)試和檢驗(yàn)MIDlets的一些特點(diǎn)。這些限制主要包括:

● 執(zhí)行速度

● 內(nèi)存可用性

創(chuàng)建在不同設(shè)備上運(yùn)行的MIDlet,每個(gè)設(shè)備有它自己的處理器速度。因此,希望有一種仿真器能以不同的速度測(cè)試運(yùn)行MIDlets,但是J2ME Wireless Toolkit的當(dāng)前版本還做不到這一點(diǎn)。同樣,要對(duì)不同設(shè)備中MIDlets測(cè)試其可用的內(nèi)存,內(nèi)存可用性決定了應(yīng)用能否在設(shè)備內(nèi)很好地運(yùn)行。對(duì)于可變的可用內(nèi)存,在仿真器中測(cè)試運(yùn)行MIDlet是不可能的。

仿真器的另一個(gè)限制是它不能模擬駐留在每個(gè)移動(dòng)設(shè)備上的應(yīng)用管理器(application manager)的工作。應(yīng)用管理器負(fù)責(zé)在移動(dòng)設(shè)備內(nèi)添加、刪除和執(zhí)行MIDlet。仿真器不能模擬應(yīng)用管理器的工作。因此,它不可能確切地確定這些MIDlets怎樣在設(shè)備內(nèi)被管理的。

3. 配置編輯程序

配置編輯程序幫助用戶配置設(shè)備環(huán)境。這意味:用戶可改變?cè)O(shè)備內(nèi)可用的不同特征。例如,用戶可修改設(shè)備圖像、屏幕大小,以及設(shè)備中可用的按鈕。這樣,編輯程序提供了可讓用戶控制模擬環(huán)境的機(jī)制。

注釋

Sun公司發(fā)布的標(biāo)準(zhǔn)J2ME Wireless Toolkit不提供配置編輯程序。但這個(gè)標(biāo)準(zhǔn)工具箱能讓用戶配置設(shè)備環(huán)境。在Motorola發(fā)布的J2ME的SDK中,有這個(gè)功能。

主站蜘蛛池模板: 迁安市| 留坝县| 大邑县| 江华| 南溪县| 易门县| 襄樊市| 龙山县| 郓城县| 常熟市| 精河县| 江孜县| 中山市| 宝清县| 金塔县| 辽阳县| 高雄县| 吉水县| 师宗县| 扬中市| 雷山县| 江川县| 兴化市| 黑水县| 调兵山市| 从江县| 英超| 高密市| 皮山县| 额尔古纳市| 元朗区| 集安市| 休宁县| 宜城市| 汉川市| 蒙山县| 杭锦旗| 永清县| 读书| 汾西县| 宜昌市|