J2ME就是Java 2 micro Edition的縮寫,是sun的java 2 的三大成員之一(J2SE,J2EE,J2ME)。專門用於開發消費性電子產品。例如手機,PDA等。
一、J2ME平台體系結構
J2ME並不是一種產品,而是一種技術,J2ME包括兩種類型的組件,即配置(configuration)和簡表(profile)。
配置(configuration)是一系列低層次的API(套用編程接口)和一種為該族設備最佳化的虛擬機。今天在用的一般配置有兩種,連線的設備配置(CDC)和限制連線的設備配置(CLDC)。
CDC提供了一種虛擬機,以及支持像靈敏發報機、尋呼機、個人數字助理(PDA)和電視機頂盒這樣的設備上的Java套用的基類庫。這些設備的典型特徵是具有一個32位的處理器和用來支持虛擬機和類庫的超過2MB存儲容量。CVM虛擬機正好滿足了它們對於Java 2虛擬機特徵集的功能需求。這是在小型平台上全特徵的虛擬機。
CLDC提供一個適合於小型的、資源受限的、連線的設備上使用的標準Java平台。這些設備的典型特徵是具有一個16位或者32位的處理器和用來支持虛擬機和類庫的160KB到512KB的總記憶體,它們通常以電池作為電源,並聯入某類網路中,聯網一般使用頻寬時常小於9600bps的無線的、斷斷續續的連線方式。CLDC的核心是K虛擬機(KVM)。“K”標記反映了它們的大小是以kilobytes(千位元組)衡量的這一事實。CLDC的特徵也是包含一系列類庫。
CDC的硬體參數:
·2M以上記憶體。
·具有網路連線能力,通常為無線網路。
·需要實現java虛擬機規範的全部功能。
·32位或者64位的處理器。
CLDC的硬體參數:
·512 KB 以下記憶體
·有限能源供應(通常使用電池)
·有限或非持續網路連線
·簡單的用戶界面
·16位或者32位的處理器
從上述的標準中我們不難看出CLDC主要針對那些資源非常受限的設備比如手機、PDA、雙工尋呼機等。而CDC主要面對那些家電產品,比如機頂盒、汽車導航系統等。簡表是以配置為基礎的,例如Mobile Information Devices Profile(MIDP)就是CLDC上層的重要簡表。與配置的縱向特性不同的是,簡表是橫向的。下圖是J2ME體系結構的框圖:
J2ME體系結構框圖
簡表(profile)是一種說明,它詳細描述了架構在配置之上並使用配置的一系列API。簡表的一個例子是創建在CDC之上的基礎描述(Foundation Profile),它為以像住宅網關、靈敏電話和雙向尋呼機這樣的設備為目標的套用提供完整的J2ME運行時環境。另一種簡表是移動信息設備描述(MIDP),它構建在CLDC之上,為那些運行在像行動電話和登錄級PDA這樣的設備上的套用提供完整的J2ME運行時環境。MIDP致力於解決像用戶界面、持久存儲、聯網和應用程式生命周期這樣的問題。
二、J2ME 目標設備
使用 CLDC 開發的 J2ME 應用程式的目標設備通常具有以下特徵:
· 可供 Java 平台使用的 160 到 512 千位元組的總記憶體
· 功率有限,常常是電池供電
· 網路連通性,常常是無線的、不一致的連線並且頻寬有限
· 用戶接口混亂,程度參差不齊;有時根本就沒有接口
一些 CLDC 支持的設備,包括無線電話、尋呼機、主流個人數字助手 (/pda/ PDA),以及小型零售支付終端。
依照 Sun Microsystems,CDC 的目標設備通常具有以下特徵:
· 使用 32 位處理器
· 2 兆位元組或更多可供 Java 平台使用的總記憶體
· 設備要求的 Java 2 “藍皮書”虛擬機的全部功能
· 網路連通性,常常是無線的、不一致的連線並且頻寬有限
· 用戶接口混亂,程度參差不齊;有時根本就沒有接口
一些 CDC 支持的設備,包括常駐網關、智慧型電話和通訊器、PDA、管理器、家用電器、銷售網點終端以及汽車導航系統。
三、J2ME、J2SE與J2EE之間的比較
下面的圖表描述了支持 J2ME 應用程式的設備,同時說明了 J2ME 適合 Java 平台之處:
四、J2ME開發工具
1)、J2MEWTK,這個工具在前文已經提到過,它是最基本的J2ME程式開發工具,免費,體積小,速度較快,完全遵守J2ME的各種規範。具有簡單的IDE界面,易於上手,開發十分方便快捷,可以和 Forte 3.0捆綁。J2MEWTK適用於初學者和已經達到很高水平的開發者。竊以為J2MEWTK+JDK+Editplus/UltraEdit是絕配。
2)、VisualAge Micro Edition 1.4。這是IBM的產品,號稱是J2ME開發領域的TOP 1,但是我用了半天,也沒有看出好在那裡。馬上就刪除了。視窗太複雜,不明所以,開發起來很難適應,速度和J2MEWTK一樣,比較龐大,裝了這個東西,你的C糟就要小心了,多了很多亂七八糟的檔案,還註冊了許多COM組件,典型的非綠色軟體。
3)、CodeWarrior for Java 6.0。這是Motolola的產品,功能十分強大,集成度很好,開發,調試,發布J2ME程式都很方便(還可以做一般的Java Program)。它的IDE和Visual Studio十分相似,很容易上手。CodeWarrior比較適合中等水平的開發者的使用。不過CodeWarrior不是免費軟體,你只能夠免費使用30天。
4)、Borland Jbuilder 5.0的Nokia Bobile版。
五、J2ME開發步驟
1. 系統要求
v Pentium 100以上CPU
v 64MB 記憶體
v Windows NT Workstation 4.0(Service Pack 3)或Windows 98
v 6 MB自由硬碟空間
v Java 2 SDK, Standard Version, 版本1.2.2或者更高
2. 安裝Java 2 SDK
在使用Motorola SDK之前必須安裝JDK,Standard Edition。
請從 http://java.sun.com/products/jdk 下載JDK,並按照Sun的指導安裝到PC中。
3. 安裝Motorola SDK
安裝之前請先卸載以前版本的Motorola SDK:
1. 選擇"開始à設定à控制板"
2. 選擇"添加/刪除程式"
3. 查找到"Motorola SDK Components for the J2ME Platform"
六、一個樣本應用程式:電話日曆
J2ME 的著名特色之一是它在受限環境中的日期處理功能。J2ME 提供的 DateField UI 元素是一個可編輯的組件,該組件用於表示日曆信息(即日期和時間)。在這一部分中,我們將使用 DateField 和 Date 函式來開發一個 J2ME 應用程式,這個應用程式用於在行動電話 UI 上顯示一個滾動日曆。
一個電話日曆應用程式
// 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 PhoneCalendar extends MIDlet
implements CommandListener, ItemStateListener {
//The commands
private Command exitCommand;
//The display for this MIDlet
private Display display;
// Display items e.g Form and DateField
Form displayForm;
DateField date;
public PhoneCalendar() {
display = Display.getDisplay(this);
exitCommand = new Command("Exit", Command.SCREEN, 1);
date = new DateField("Select to date", DateField.DATE);
}
// Start the MIDlet by creating the Form and
// associating the exit command and listener.
public void startApp() {
displayForm = new Form("Quick Calendar");
displayForm.append(date);
displayForm.addCommand(exitCommand);
displayForm.setCommandListener(this);
displayForm.setItemStateListener(this);
display.setCurrent(displayForm);
}
public void itemStateChanged(Item item)
{
// Get the values from changed item
}
// Pause is a no-op when there is no background
// activities or record stores to be closed.
public void pauseApp() { }
// Destroy must cleanup everything not handled
// by the garbage collector.
public void destroyApp (boolean unconditional) { }
// Respond to commands. Here we are only implementing
// the exit command. In the exit command, cleanup and
// notify that the MIDlet has been destroyed.
public void commandAction (
Command c, Displayable s) {
if (c == exitCommand) {
destroyApp(false);
notifyDestroyed();
}
}
}
如上定義的 PhoneCalendar MIDlet 繼承了 ItemListener 和 CommandListener。它使 MIDlet 具備了跟蹤螢幕上的條目變化和對用戶命令作出回響的功能。由此應用程式創建的用戶界面從為電話螢幕定義一個顯示並附加上一個 Form 開始。該 Form 充當容器使用,可以保持一些用戶界面項。commandAction() 函式在 J2ME 中執行命令處理程式,並且定義某個命令應執行的動作。
部署 J2ME
您可以從 Sun 下載一個仿真器,該仿真器允許您在台式機系統上測試 J2ME 應用程式。如果您寧願避免所有的圖形開銷,則您也可以在命令行上部署 J2ME。
在仿真環境中進行部署
在仿真環境中部署和運行 J2ME 應用程式,要涉及到仿真器的安裝和配置。J2ME Wireless Toolkit 提供了一個仿真環境,該環境用於在資源受限的設備上對 Java 應用程式進行的開發和部署。這裡教您如何自己運行它:
安裝SUN-JAVA- Wireless Toolkit(請參閱參考資料)。安裝程式中將會用必要的說明指導您進行安裝。為運行這些示例,請選擇獨立(standalone)模式。如果您想將它集成到 IDE,請選擇集成(integrated)模式。
通過 KToolbar 的用戶界面創建一個新工程。指定一個類名。
將第 2 步指定的類名放到 C:【J2ME Installation directory】apps【Project Name】src 目錄。
編譯這個工程。
從 J2ME Wireless Toolkit -> Default Device Selection 選擇 DefaultGrayPhone 作為預設設備。
運行這個工程。
該工具箱還提供有一個選項,用於把工程打包成一個 jar 檔案和一個 jad 檔案。雙擊 jad 檔案將會部署 jar 檔案所指定的應用程式。
在命令行上進行部署
這裡也有一些可用的命令行選項。
1. 創建類檔案:
C:J2MEappsPhoneCalendar>
javac _ tmpclasses _ootclasspath
C:J2MElibmidpapi.zip -classpath tmpclasses;
classes src*.java
2. 創建清單檔案 manifest.mf:
MIDlet-1: PhoneCalendar,
PhoneCalendar.png,
PhoneCalendar
MIDlet-Name: Phone Calendar
MIDlet-Vendor: Sun Microsystems
MIDlet-Version: 1.0
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-1.0
3. 創建 jar 檔案:
C:J2MEappsPhoneCalendar>jar cfm .bin
PhoneCalendar.jar
manifest.mf -C classes . _ res .
4. 創建 jad 檔案:
MIDlet-1: PhoneCalendar,
PhoneCalendar.png,
PhoneCalendar
MIDlet-Jar-Size: 4490
MIDlet-Jar-URL:
F:J2MEappsPhoneCalendarbin
PhoneCalendar.jar
MIDlet-Name: PhoneCalendar
MIDlet-Vendor: Sun Microsystems
MIDlet-Version: 1.0
5. 運行 jad 檔案:
C:J2MEbin> emulator -Xdescriptor:
C:J2MEappsPhoneCalendar
binPhoneCalendar.jad