随着无线移动通讯技术的飞速发展,手机已从个别人手中的炫耀品摇身一变成为普通老百姓掌中必备的通讯工具,同时手机的功能也变的丰富多彩,从以前的移动电话机逐渐成为集通讯、短信、游戏、音频和视频为一体的多功能掌上电脑。想必您一定使用手机玩过游戏吧,是不是让您真实感受到移动游戏的惊奇体验。现在,随着手机开发平台的规范化和标准化,越来越多的无线应用被开发到手机上,给我们生活带来更多的方便和乐趣。

近年来,各大手机厂商纷纷在各自的产品上提供无线应用程序平台,但是由于各厂商提供的平台架构各异,使得无线应用开发者仅只能针对特有机型设计手机程序应用,这严重影响到无线应用的交流和发展。为了使无线应用程序独立于底层的平台架构,SUN软件公司与众多手机厂商携手合作,开发出一套规范化和标准化的手机应用开发平台。该平台是基于Java语言的无线设备虚拟平台,即J2ME平台,它是SUN公司在PC上Java虚拟机平台的微缩版本,具有PC Java虚拟机平台的“一次写到处运行”的特性。在J2ME平台上开发手机程序非常的容易,只要您掌握了基本的Java语言基础,就可以动手为自己的手机开发应用程序。

本系列教程将系统地介绍基于J2ME平台的Java手机程序的开发技术。撰写本系列教程的目标是让所有的电脑爱好者都可以亲自动手编写手机程序,所以一直坚持以最通俗的语言讲述复杂技术的写作原则,带领读者步入开发Java手机程序之旅。

J2ME全称Java 2 Platform Micro Edition,可译为Java 2平台微缩版本。它把 Java 平台的以网络为中心和平台不可知论的特性移植到有限存储器和有限处理器的设备。在我们今天的生活中,个性化的智能信息用品已经是必需品。这些用品包括手机、双向寻呼机、智能卡、个人电脑记事本(personal organizer)和掌上电脑(palmtop)。它们的趋势是成为目的特定的、资源有限的网络连接设备,而不是我们迄今已知的PC机。为专门满足这一巨大的消费空间,J2ME提供了极多的创新 Java 技术,为不同底层操作平台的设备提供了统一的应用虚拟平台,并将Java平台的“一次写到处运行”的特性延伸到有限存储器和有限处理器的设备上。J2ME 为小型设备带来了 Java 语言的跨平台功能,允许移动无线设备共享应用程序。

1. J2ME总体架构

J2ME是一种通过许多部件和规范的技术, 这众多的部件和规范帮助J2ME来满足这众多的消费产品的不同的需要。和所有的Java程序语言技术一样,在它的核心属于一种虚拟机。就像使用所有 Java技术一样,J2ME的核心也在一种虚拟机中。最初,用于J2ME应用程序虚拟机的被称作 Kilobyte virtual machine或简称 KVM。就像它名称的含义,KVM比较小,通常只有 128K或更少。这比起我们通常了解和使用的J2SE(Java 2标准版)Java虚拟机 ( JVM )的 32 MB来说就小得多了。 用于连接虚拟机的是一系列配置和简表,它们提供了用于特定J2ME环境的类应用程序接口,图一展示了J2ME的总体架构。 每个配置和简表处理一般或具体的消费产品,配置和简表规范是由多种多样的设备生产商和用户共同开发并建立的。配置是用于一组通用设备的最小的Java平台,常常归为一种横向的设备分组,相对来说,横向分组设备是那些共享相同的内存安排,通信带宽,能量需求以及用户能力的设备,一般认为配置能够提供这众多的设备的所有需求。

 

      图一:J2ME平台总体架构图

2. 配置(Configuration)

配置(Configuation)将基本运行时环境定义为一组核心类和一个运行在特定类型设备上的特定虚拟机。

虽然还可能在将来定义其他的配置,但当前 J2ME 存在两种配置:

 (1)、CLCD(Connected limited device configuration有限连接设置配置)

CLCD是为具有较小存储容量的设备而设计的。根据规范中所说,运行 CLDC的设备应该有 512K或更少的内存空间、一个有限的电源供给 (通常是使用电池)、有限的或断断续续的网络连接性(9600 bps或更少)以及多样化的用户界面甚至没有用户界面。

通常说来,这个配置是为个人化的、移动的、有限连接信息设备而设计,比如手机、呼叫器、PDA和POS终端等。由于我们准备研究的对象是手机,它也是一种典型的CLCD设备,所以有必要对CLCD层进行简要介绍。CLCD为简表层提供接口服务,同时还可以直接为应用程序层提供服务。

CLCD通过四个包为简表层和应用程序提供服务,它包括语言服务、输入输出服务、网络通讯服务和实用工具服务等。这些服务分别在以下四个包中实现:

  1. java.lang语言包:此包是J2SE中的同名包的子集,继承了J2SE语言包的大部分功能。但是,由于有限于设备的运行资源,CLCD不支持浮点型数据类型,也不提供文件的支持和错误处理的支持。
  2. java.io输入输出包:此包是J2SE中的同名包的子集,向上层提供基本的IO服务。
  3. java.util实用工具包:此包是J2SE中的同名包的子集,它提供定时器、日期等常用的实用工具类,但是它没有提供Java集合工具类。
  4. java.microedition网络通讯包:此包是CLCD中唯一不是J2SE子集的包。它是专门为小型有限资源设备设计的,为其提供类似J2SE的网络输入输出功能。在介绍Java手机网络通讯一节我们将重点说明此包提供的类的使用。从上面对CLCD提供的四个包的说明可以看出,其实CLCD是J2SE的一个子集,其大部分功能都是从J2SE中减化来的,同时,它还根据运行设备的特性提供了附加的功能。图二展示了CLCD与J2SE关系图.

图二:CLCD与J2SE关系图

 (2)、CDC(Connected Device Configuration连接设备配置)

CDC是为具有较好的存储容量的设备而设计。一般CDC设备的内存都应大于512k,许多CDC设备配置了2M左右的内存。现在,这一类设备通常是共享的、固定的 (不用移动)网络连接信息设备,像电视机机顶盒,网络电视系统、互联网电话与汽车导航/娱乐系统等等。

3. 简表(Profile)

简表定义了应用程序所支持的设备类型。特别地,它向J2ME配置添加了特定于域的类来定义设备的某种作用。简表建立在配置的上层。至今,已经为 J2ME 定义了两种简表:KJava 和移动信息设备简表(MIDP),它们也被建立在CDLC上。这两种简表适用于小型设备。在手机J2ME中基本上都提供了MIDP简表,手机程序的设计基本上都是基于MIDP的,所以也常把J2ME手机程序设计称为MIDP程序设计。

MIDP,全称Mobile Information Device Profile,可译为移动信息设备简表,是第一个实现的简表。它补充CLDC并且提供应用程序语义和控件、用户界面、持久存储器、网络和用于移动电话的计时器、双通道呼叫器和其他无线电设备。在以后的章节里,我们将重点介绍使用MIDP提供的类库创建手机程序。

4. 虚拟机

在J2ME架构图的最底是虚拟机层,它同J2SE中的JVM性质相同。根据设备使用的配置的不同,使用的虚拟机也有差异。如配置层为CLDC,则虚拟机为KVM,如配置为CDC则虚拟机为CVM。应用程序永远不会直接调用虚拟机服务的,所以对于一般的应用程序开发者可以不用对虚拟机有更深入的了解。

5. 应用程序(Application)

在J2ME架构图最顶层是应用程序层,它是可以在J2ME平台上为实现某个事务而运行的程式。在许多手机中都预安装了一些应用程序,如游戏、计算器、记事簿、移动QQ等等。本系列教程介绍的重点也是在这一层,在以后的章节里,我们将学习到如何在手机J2ME平台上创建各种各样的手机应用程序。