级别: 初级
Soma Ghosh (该邮件地址已受到反垃圾邮件插件保护。要显示它需要在浏览器中启用 JavaScript。), 高级应用程序开发员, Entigo
2001 年 11 月 04 日
Java 2 平台袖珍版(Java 2 Platform, Micro Edition(J2ME))为开发者提供了伟大的工具,它把 Java 平台的以网络为中心和平台不可知论的特性移植到有限存储器和有限处理器的设备。Soma Ghosh 解释了 J2ME 领域的基础知识,向您展示了该平台的构件并演示了一个样本应用程序。
在我们今天的生活中,个性化的智能信息用品已经是必需品。这些用品包括移动电话、双向寻呼机、智能卡、个人电脑记事本 (personal organizer)和掌上电脑(palmtop)。它们的趋势是成为目的特定的、资源有限的网络连接设备,而不是我们迄今已知的通用台式机。为专门满足 这一巨大的消费空间,Java 2 平台袖珍版(J2ME)提供了极多的创新 Java 技术。
作为 J2ME 目标的微型设备具有 16 位或 32 位处理器和总量不少于大约 128 KB 的存储器。这些设备都符合连接限制设备配置(Connected Limited Device Configuration(CLDC)),同时 也保留了 Java 的传统特性,即任何时间、任何地点的代码可移植性、部署灵活性、安全的网络传送以及代码稳定性。J2ME CLDC 的先决条件是一个紧缩的 JVM,称为K 虚拟机(K Virtual Machine(KVM))。KVM 是为小存储器、资源受限的网络连接设备设计的。
另一个 J2ME 配置是连接设备配置(Connected Device Configuration(CDC))。它的目标是高档的消费类电子 产品和嵌入设备,例如智能通信器、高级“智能”寻呼机、智能个人数字助理(PDA)以及交互式数字电视机顶盒。典型地,这些设备运行一个 32 位的微处理器/控制器,而且有总量大于 2 MB 的用于虚拟机和库的存储的存储器。CDC 包含有 C 虚拟机(C Virtual Machine(CVM))。在本篇文章中,我们将把注意力放在 CLDC 和 KVM 体系结构上。关于 CDC 和 CVM 的更多信息,请参阅下面的参考资料部 分。
为适应占用资源很小的(small-footprint)设备的特性,KVM 已经按以下方式修改:
- VM 的大小和类库已减小为 50 到 80 KB 目标代码的标准
- 存储器占用已经减小为几十千字节的标准
- 在具有 16 位和 32 位处理器的设备上,性能有效
- 体系结构是高可移植的,特定于机器和/或平台的代码的总量很少
- 多线程和垃圾回收是独立于系统的
- 可以对虚拟机的组件进行配置,以适合于特定设备,从而增强了灵活性
|
J2ME 体系结构是基于设备的系列和类别的。一个类别定义了一个特定种类的设备:移动电话、简单寻呼机和电脑记事本都是单独的类别。对存储器和处理能力有相近 需求的若干类别的设备构成设备的一个系列。移动电话、简单寻呼机和简单个人电脑记事本一起就是占用资源很小的设备的一个系列。
图 1 定义了在 J2ME 上下文环境中设备的系列和类别之间的关系。
图 1. 设备的系列(family)和类别(category)
为了支持资源受限设备系列所要求的那种灵活性和可定制部署,人们将 J2ME 体系结构设计成模块化的和可伸缩的。J2ME 技术在一个完整的应用程序运行时模型中定义了这种模块性和可伸缩性,在该模型中的四个软件层都构建在设备的主机操作系统上。
图 2 显示了 J2ME 体系结构。
图 2. J2ME 体系结构
- Java 虚拟机层(Java Virtual Machine Layer):这一层是 Java 虚拟机的一个实现,它是为特定设备的主机操作系统定制的,而且支持一个特定的 J2ME 配置(configuration)。
- 配置层(Configuration Layer):配置层定义了 Java 虚拟机功能的和特定类别设备上可用的 Java 类库的最小集。从某种程度上说,一个配置定义了 Java 平台功能部件和库的共同性,开发者可以假设这些功能部件和库在属于某一特定类别的所有设备上都是可用的。用户不太会见到这一层,但它对框架 (profile)实现者非常重要。
- 框架层(Profile Layer):框架层定义了特定系列设备上可用的应用程序编程接口(API)的最小集。框架 在一个特定的配置上面实现。应用程序是针对特定的框架编写的,因此可以移植到支持该框架的任何设备上。一个设备可以支持多个框架。用户和应用程序供应商看 到最多的就是这一层。
- MIDP 层:移动信息设备框架(Mobile Information Device Profile(MIDP))是一个 Java API 集合,它处理诸如用户界面、持久存储和联网这样的问题。
Java 虚拟机层(Java Virtual Machine Layer)、配置层(Configuration Layer)和框架层(Profile Layer)一起构成了连接限制设备配置(Connected Limited Device Configuration(CLDC))。 MID 框架(MID Profile)和 CLDC 提供了一个标准的运行时环境,这个环境允许把新的应用程序和服务动态地部署在终端用户设备上。
|
CLDC 和 MIDP 组合起来为创建移动电话和简单双向寻呼机上的应用程序提供了完整的环境。
MID 框架的核心是一个 MIDlet 应用程序。这个应用程序继承了 MIDlet
类,以允许应用程序管理软件对 MIDlet
进行控制、从应用程序描述符检索属性以及对状态变化进行通知和请求。
所有 MIDlet 都继承 MIDlet
类 — 运行时环境(应用程序管理器)和 MIDlet
应用程序代码之间的接口。MIDlet 类提供了用于调用、暂停、重新启动和终止 MIDlet 应用程序的 API。
应用程序管理软件可以在运行时环境内管理多个 MIDlet 的活动。此外,MIDlet 可以自己发起一些状态变化,并把这些变化通知给应用程序管理软件。
MIDP API 类的完整集合可以分为两个类别:
- 用于用户界面的 MIDP API:设计这些 API
是为了能以一系列屏幕显示为基础与用户进行交互操作,每一屏幕显示把适量的数据显示给用户。命令以每屏幕为基础提供给用户。这些 API
允许应用程序决定下一屏显示什么、执行什么计算和使用网络服务的何种请求。
- 用于处理数据库的 MIDP API:这些 API 负责组织和操作设备数据库,这个数据库由在 MIDlet 的多个调用之间跨越时保持持久的信息组成。
底层的 CLDC API 用于处理字符串、对象和整数。还提供了 Java 2 API 的一个子集,用于处理 I/O 和网络通信。
图 3 显示了 J2ME 的构件。
图 3. J2ME 的构件
标准(Standard)版和袖珍(Micro)版 Java API 之间的关系如图 4 所示。
图 4. J2ME 和 J2SE API 之间的关系
J2ME 中的事件处理是以一系列屏幕显示为基础的,这与 Java 平台的台式机版本的事件处理有很大不同。每一屏显示特定的少量数据。
命令以每屏幕为基础提供给用户。 Command
对象封装了与动作的语义相关的名称和信息。这个对象主要用于为用户提供动作选择。所产生的命令行为定义在与屏幕显示相关联的 CommandListener
中。
每一个 Command
包含三块信息:一个 label(标号)、一个type(类型)和一个priority(优先级)。label 用于命令的可视表示;type 和 priority
由系统使用,系统用它们来决定 Command
如何映射到具体用户界面。
图 5 显示了 J2ME 中的事件处理机制。
图 5. 在 J2ME 中处理用户事件
MIDP API 尽管维护的是一个受限的框架,但它还是提供了 UI 元素的完整集合。以下是最重要的 UI 元素中的一些:
Alert
用于在屏幕上向用户显示关于异常情况或错误的信息。
Choice
用于实现从既定数量的选项中进行选择。
ChoiceGroup
提供一组相关选项。
Form
作为其它 UI 元素的容器。
List
提供一个选项列表。
StringItem
充当只显(display-only)字符串之用。
TextBox
是允许用户输入和编辑文本的屏幕显示。
TextField
允许用户输入和编辑文本。多个TextField
可放到一个Form
中。
DateField
是一个可编辑的组件,用于表示日期和时间信息。DateField
可以放到Form
中。
Ticker
用于文本的可滚动显示。
UI 元素的完整列表可在 MID Profile API 文档中找到,该文档随 J2ME Wireless Toolkit 一起提供(请参阅下面的参考资料获 得更多信息)。
MIDP 提供了一组用于组织和操作设备数据库的类和接口: RecordStore
、 RecordComparator
和 RecordFilter
。 RecordStore
由大量的记录组成,这些记录在 MIDlet 的多个调用之间跨越时保持持久。对 RecordStore
中的记录进行比较,或者从 RecordStore
中抽取若干组记录,都是 RecordComparator
和 RecordFilter
接口提供的功能。
|
前面的部分已经对 J2ME 作了一个概览。在这一部分中,我们将通过开发一个现实的电话界面应用程序来熟悉这个平台的实践细节。
J2ME 的著名特色之一是它在受限环境中的日期处理功能。J2ME 提供的 DateField
UI
元素是一个可编辑的组件,该组件用于表示日历信息(即日期和时间)。在这一部分中,我们将使用 DateField
和 Date
函数来开发一个 J2ME 应用程序,这个应用程序用于在移动电话 UI 上显示一个滚动日历。
一个电话日历应用程序
// Import of API classes |
如上定义的 PhoneCalendar
MIDlet 继承了 ItemListener
和 CommandListener
。它使 MIDlet
具备了跟踪屏幕上的条目变化和对用户命令作出响应的功能。由此应用程序创建的用户界面从为电话屏幕定义一个显示并附加上一个 Form
开始。该 Form
充当容器使用,可以保持一些用户界面项。 commandAction()
函数在 J2ME 中执行命令处理程序,并且定义某个命令应执行的动作。
|
您可以从 Sun 下载一个仿真器,该仿真器允许您在台式机系统上测试 J2ME 应用程序。如果您宁愿避免所有的图形开销,则您也可以在命令行上部署 J2ME。
在仿真环境中部署和运行 J2ME 应用程序,要涉及到仿真器的安装和配置。J2ME Wireless Toolkit 提供了一个仿真环境,该环境用于在资源受限的设备上对 Java 应用程序进行的开发和部署。这里教您如何自己运行它:
- 安装 J2ME 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:\J2ME\apps\PhoneCalendar> |
2. 创建清单文件 manifest.mf
:
MIDlet-1: PhoneCalendar, |
3. 创建 jar 文件:
C:\J2ME\apps\PhoneCalendar>jar cfm .\bin\ |
4. 创建 jad 文件:
MIDlet-1: PhoneCalendar, |
5. 运行 jad 文件:
C:\J2ME\bin> emulator -Xdescriptor: |
|
J2ME 是一个重要的用于无线方面的 Java 平台,它从可移植的、以网络为中心的 Java 虚拟机转变而来。J2ME 应用程序的开发和部署的灵活性将有效地满足日益增长的无线领域的需求。敬请继续关注!
- 您可以参阅本文在 developerWorks 全球站点上的英
文原文.
- 参加本文的讨论论坛。
- 访问 developerWorksWireless专
区,保持对无线(wireless)领域的关注。
- developerWorksJava
技术专区让您紧跟 Java 领域发生的事件。
- 这
篇文章讨论关联对等网(relating peer-to-peer)以及将所有无线用品融合起来的机制。
Sun 提供的一些文档:
- 访问 J2ME 的主页,以了解 J2ME 到底是什么。
- 阅读 J2ME 体系结构和配置的详细信息(PDF
格式)。
- 参阅关于 J2ME 的更多文档。
- 阅读 J2ME 平台的Connected Limited
Device Configuration和Connected Device
Configuration。
- 访问MIDP 主页,以了解
MIDP API。
- 下载J2ME
Wireless Toolkit,以运行和测试您的 J2ME 应用程序。您也可以浏览这个工具箱(toolkit)随带的 MIDP API
文档。
- 浏览关于“Java 无线倡议”的广
泛文章。
Soma Ghosh 是计算机科学与工程学士。在过去六年中,她已经开发了涉及范围颇广的电子商务和网络 Java 应用程序。她相信无线商务是业界近年的前途所在,最近她已从现有的台式机模型中转到了无线倡议中。目前,她是 Entigo 的高级应用程序开发员,也是 B2B 销售和服务器端电子商务产品和解决方案的倡导者。请通过该邮件地址已受到反垃圾邮件插件保护。要显示它需要在浏览器中启用 JavaScript。与 Soma 联系。 |