Java 2 平臺(tái)袖珍版(Java 2 Platform, Micro Edition(J2ME))為開(kāi)發(fā)者提供了偉大的工具,它把 Java 平臺(tái)的以網(wǎng)絡(luò)為中心和平臺(tái)不可知論的特性移植到有限存儲(chǔ)器和有限處理器的設(shè)備。Soma Ghosh 解釋了 J2ME 領(lǐng)域的基礎(chǔ)知識(shí),向您展示了該平臺(tái)的構(gòu)件并演示了一個(gè)樣本應(yīng)用程序。
在我們今天的生活中,個(gè)性化的智能信息用品已經(jīng)是必需品。這些用品包括移動(dòng)電話、雙向?qū)ず魴C(jī)、智能卡、個(gè)人電腦記事本(personal organizer)和掌上電腦(palmtop)。它們的趨勢(shì)是成為目的特定的、資源有限的網(wǎng)絡(luò)連接設(shè)備,而不是我們迄今已知的通用臺(tái)式機(jī)。為專門(mén)滿足這一巨大的消費(fèi)空間,Java 2 平臺(tái)袖珍版(J2ME)提供了極多的創(chuàng)新 Java 技術(shù)。
Java VM 的變遷:從臺(tái)式機(jī)到微型設(shè)備 作為 J2ME 目標(biāo)的微型設(shè)備具有 16 位或 32 位處理器和總量不少于大約 128 KB 的存儲(chǔ)器。這些設(shè)備都符合連接限制設(shè)備配置(Connected Limited Device Configuration(CLDC)),同時(shí)也保留了 Java 的傳統(tǒng)特性,即任何時(shí)間、任何地點(diǎn)的代碼可移植性、部署靈活性、安全的網(wǎng)絡(luò)傳送以及代碼穩(wěn)定性。J2ME CLDC 的先決條件是一個(gè)緊縮的 JVM,稱為 K 虛擬機(jī)(K Virtual Machine(KVM))。KVM 是為小存儲(chǔ)器、資源受限的網(wǎng)絡(luò)連接設(shè)備設(shè)計(jì)的。
另一個(gè) J2ME 配置是連接設(shè)備配置(Connected Device Configuration(CDC))。它的目標(biāo)是高檔的消費(fèi)類電子產(chǎn)品和嵌入設(shè)備,例如智能通信器、高級(jí)“智能”尋呼機(jī)、智能個(gè)人數(shù)字助理(PDA)以及交互式數(shù)字電視機(jī)頂盒。典型地,這些設(shè)備運(yùn)行一個(gè) 32 位的微處理器/控制器,而且有總量大于 2 MB 的用于虛擬機(jī)和庫(kù)的存儲(chǔ)的存儲(chǔ)器。CDC 包含有 C 虛擬機(jī)(C Virtual Machine(CVM))。在本篇文章中,我們將把注意力放在 CLDC 和 KVM 體系結(jié)構(gòu)上。
為適應(yīng)占用資源很小的(small-footprint)設(shè)備的特性,KVM 已經(jīng)按以下方式修改:
1.VM 的大小和類庫(kù)已減小為 50 到 80 KB 目標(biāo)代碼的標(biāo)準(zhǔn)
2.存儲(chǔ)器占用已經(jīng)減小為幾十千字節(jié)的標(biāo)準(zhǔn)
3.在具有 16 位和 32 位處理器的設(shè)備上,性能有效
4.體系結(jié)構(gòu)是高可移植的,特定于機(jī)器和/或平臺(tái)的代碼的總量很少
5.多線程和垃圾回收是獨(dú)立于系統(tǒng)的
6.可以對(duì)虛擬機(jī)的組件進(jìn)行配置,以適合于特定設(shè)備,從而增強(qiáng)了靈活性
J2ME 體系結(jié)構(gòu)和配置 J2ME體系結(jié)構(gòu)是基于設(shè)備的系列和類別的。一個(gè)類別定義了一個(gè)特定種類的設(shè)備:移動(dòng)電話、簡(jiǎn)單尋呼機(jī)和電腦記事本都是單獨(dú)的類別。對(duì)存儲(chǔ)器和處理能力有相近需求的若干類別的設(shè)備構(gòu)成設(shè)備的一個(gè)系列。移動(dòng)電話、簡(jiǎn)單尋呼機(jī)和簡(jiǎn)單個(gè)人電腦記事本一起就是占用資源很小的設(shè)備的一個(gè)系列。圖 1 定義了在 J2ME 上下文環(huán)境中設(shè)備的系列和類別之間的關(guān)系。
圖 1. 設(shè)備的系列(family)和類別(category) 為了支持資源受限設(shè)備系列所要求的那種靈活性和可定制部署,人們將 J2ME 體系結(jié)構(gòu)設(shè)計(jì)成模塊化的和可伸縮的。J2ME 技術(shù)在一個(gè)完整的應(yīng)用程序運(yùn)行時(shí)模型中定義了這種模塊性和可伸縮性,在該模型中的四個(gè)軟件層都構(gòu)建在設(shè)備的主機(jī)操作系統(tǒng)上。圖 2 顯示了 J2ME 體系結(jié)構(gòu)。
圖 2. J2ME 體系結(jié)構(gòu) 1.Java 虛擬機(jī)層(Java Virtual Machine Layer):這一層是 Java 虛擬機(jī)的一個(gè)實(shí)現(xiàn),它是為特定設(shè)備的主機(jī)操作系統(tǒng)定制的,而且支持一個(gè)特定的 J2ME 配置(configuration)。
2.配置層(Configuration Layer):配置層定義了 Java 虛擬機(jī)功能的和特定類別設(shè)備上可用的 Java 類庫(kù)的最小集。從某種程度上說(shuō),一個(gè)配置定義了 Java 平臺(tái)功能部件和庫(kù)的共同性,開(kāi)發(fā)者可以假設(shè)這些功能部件和庫(kù)在屬于某一特定類別的所有設(shè)備上都是可用的。用戶不太會(huì)見(jiàn)到這一層,但它對(duì)框架(profile)實(shí)現(xiàn)者非常重要。
3.框架層(Profile Layer):框架層定義了特定系列設(shè)備上可用的
應(yīng)用程序編程接口(API)的最小集。框架在一個(gè)特定的配置上面實(shí)現(xiàn)。應(yīng)用程序是針對(duì)特定的框架編寫(xiě)的,因此可以移植到支持該框架的任何設(shè)備上。一個(gè)設(shè)備可以支持多個(gè)框架。
用戶和應(yīng)用程序供應(yīng)商看到最多的就是這一層。
4.MIDP 層:移動(dòng)信息設(shè)備框架(Mobile Information Device Profile(MIDP))是一個(gè) Java API 集合,它處理諸如用戶界面、持久存儲(chǔ)和聯(lián)網(wǎng)這樣的問(wèn)題。
Java 虛擬機(jī)層(Java Virtual Machine Layer)、配置層(Configuration Layer)和框架層(Profile Layer)一起構(gòu)成了連接限制設(shè)備配置(Connected Limited Device Configuration(CLDC))。MID 框架(MID Profile)和 CLDC 提供了一個(gè)標(biāo)準(zhǔn)的運(yùn)行時(shí)環(huán)境,這個(gè)環(huán)境允許把新的應(yīng)用程序和服務(wù)動(dòng)態(tài)地部署在終端用戶設(shè)備上。
用 MIDP API 進(jìn)行 J2ME 編程:構(gòu)件 CLDC 和 MIDP 組合起來(lái)為創(chuàng)建移動(dòng)電話和簡(jiǎn)單雙向?qū)ず魴C(jī)上的應(yīng)用程序提供了完整的環(huán)境。MID 框架的核心是一個(gè) MIDlet 應(yīng)用程序。這個(gè)應(yīng)用程序繼承了 MIDlet 類,以允許應(yīng)用程序管理軟件對(duì) MIDlet 進(jìn)行控制、從應(yīng)用程序描述符檢索屬性以及對(duì)狀態(tài)變化進(jìn)行通知和請(qǐng)求。所有 MIDlet 都繼承 MIDlet 類 ― 運(yùn)行時(shí)環(huán)境(應(yīng)用程序管理器)和 MIDlet 應(yīng)用程序代碼之間的接口。MIDlet 類提供了用于調(diào)用、暫停、重新啟動(dòng)和終止 MIDlet 應(yīng)用程序的 API。 應(yīng)用程序管理軟件可以在運(yùn)行時(shí)環(huán)境內(nèi)管理多個(gè) MIDlet 的活動(dòng)。此外,MIDlet 可以自己發(fā)起一些狀態(tài)變化,并把這些變化通知給應(yīng)用程序管理軟件。 MIDP API 類的完整集合可以分為兩個(gè)類別:
一、用于用戶界面的 MIDP API:設(shè)計(jì)這些 API 是為了能以一系列屏幕顯示為基礎(chǔ)與用戶進(jìn)行交互操作,每一屏幕顯示把適量的數(shù)據(jù)顯示給用戶。命令以每屏幕為基礎(chǔ)提供給用戶。這些 API 允許應(yīng)用程序決定下一屏顯示什么、執(zhí)行什么計(jì)算和使用網(wǎng)絡(luò)服務(wù)的何種請(qǐng)求。
二、用于處理數(shù)據(jù)庫(kù)的 MIDP API:這些 API 負(fù)責(zé)組織和操作設(shè)備數(shù)據(jù)庫(kù),這個(gè)數(shù)據(jù)庫(kù)由在 MIDlet 的多個(gè)調(diào)用之間跨越時(shí)保持持久的信息組成。
底層的 CLDC API 用于處理字符串、對(duì)象和整數(shù)。還提供了 Java 2 API 的一個(gè)子集,用于處理 I/O 和網(wǎng)絡(luò)通信。圖 3 顯示了 J2ME 的構(gòu)件。
圖 3. J2ME 的構(gòu)件 標(biāo)準(zhǔn)(Standard)版和袖珍(Micro)版 Java API 之間的關(guān)系如圖 4 所示。
圖 4. J2ME 和 J2SE API 之間的關(guān)系 J2ME 中的事件處理 J2ME 中的事件處理是以一系列屏幕顯示為基礎(chǔ)的,這與 Java 平臺(tái)的臺(tái)式機(jī)版本的事件處理有很大不同。每一屏顯示特定的少量數(shù)據(jù)。命令以每屏幕為基礎(chǔ)提供給用戶。Command 對(duì)象封裝了與動(dòng)作的語(yǔ)義相關(guān)的名稱和信息。這個(gè)對(duì)象主要用于為用戶提供動(dòng)作選擇。所產(chǎn)生的命令行為定義在與屏幕顯示相關(guān)聯(lián)的 CommandListener 中。每一個(gè) Command 包含三塊信息:一個(gè) label(標(biāo)號(hào))、一個(gè) type(類型)和一個(gè) priority(優(yōu)先級(jí))。label 用于命令的可視表示;type 和 priority 由系統(tǒng)使用,系統(tǒng)用它們來(lái)決定 Command 如何映射到具體用戶界面。圖 5 顯示了 J2ME 中的事件處理機(jī)制。
圖 5. 在 J2ME 中處理用戶事件 設(shè)計(jì)用戶界面 MIDP API 盡管維護(hù)的是一個(gè)受限的框架,但它還是提供了 UI 元素的完整集合。以下是最重要的 UI 元素中的一些:
1.Alert 用于在屏幕上向用戶顯示關(guān)于異常情況或錯(cuò)誤的信息。
2.Choice 用于實(shí)現(xiàn)從既定數(shù)量的選項(xiàng)中進(jìn)行選擇。
3.ChoiceGroup 提供一組相關(guān)選項(xiàng)。
4.Form 作為其它 UI 元素的容器。
5.List 提供一個(gè)選項(xiàng)列表。
6.StringItem 充當(dāng)只顯(display-only)字符串之用。
7.TextBox 是允許用戶輸入和編輯文本的屏幕顯示。
8.TextField 允許用戶輸入和編輯文本。多個(gè) TextField 可放到一個(gè) Form 中。
9.DateField 是一個(gè)可編輯的組件,用于表示日期和時(shí)間信息。DateField 可以放到 Form 中。
10.Ticker 用于文本的可滾動(dòng)顯示。
管理設(shè)備數(shù)據(jù)庫(kù) MIDP 提供了一組用于組織和操作設(shè)備數(shù)據(jù)庫(kù)的類和接口:RecordStore、RecordComparator 和 RecordFilter。RecordStore 由大量的記錄組成,這些記錄在 MIDlet 的多個(gè)調(diào)用之間跨越時(shí)保持持久。對(duì) RecordStore 中的記錄進(jìn)行比較,或者從 RecordStore 中抽取若干組記錄,都是 RecordComparator 和 RecordFilter 接口提供的功能。
開(kāi)發(fā) J2ME 應(yīng)用程序 前面的部分已經(jīng)對(duì) J2ME 作了一個(gè)概覽。在這一部分中,我們將通過(guò)開(kāi)發(fā)一個(gè)現(xiàn)實(shí)的電話界面應(yīng)用程序來(lái)熟悉這個(gè)平臺(tái)的實(shí)踐細(xì)節(jié)。一個(gè)樣本應(yīng)用程序:電話日歷。J2ME 的著名特色之一是它在受限環(huán)境中的日期處理功能。J2ME 提供的 DateField UI 元素是一個(gè)可編輯的組件,該組件用于表示日歷信息(即日期和時(shí)間)。在這一部分中,我們將使用 DateField 和 Date 函數(shù)來(lái)開(kāi)發(fā)一個(gè) J2ME 應(yīng)用程序,這個(gè)應(yīng)用程序用于在移動(dòng)電話 UI 上顯示一個(gè)滾動(dòng)日歷。
// Import of API classes
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.util.*;
//A first MIDlet with simple text and a few commands.
public class Pho
本文來(lái)自:http://www.linuxpk.com/45953.html發(fā)表您的高見(jiàn)!
·上一篇:利用J2ME與ASP建立數(shù)據(jù)庫(kù)連接·下一篇:J2ME(CLDC/MIDP)簡(jiǎn)介