J2ME(Java 2 micro Edition)是一种高度优化的Java运行环境,针对市面上的大量消费类电子设备,例如Papers、cellularphones(蜂窝电话), screen-phones(可视电话?)、digital set-top boxes(数字机顶盒)、car navigation systems(汽车导航系统)等等。 J2ME技术在1999年的JavaOne Developer Conference大会上推出。J2ME技术将Java语言的与平台无关的特性移植到小型电子设备上,允许移动无线设备之间共享应用程序。
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.
publicclassPhoneCalendar 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