1、任我学网站: htp:/ Java 手机开发 任我学网站: htp:/2 内容简介 本书主要是针对目前流行的 java 移动设备应用开发,包括移动设备上广泛应用的各 种软件:移动网站开发、图片、多媒体、MMS 和游戏的开发的功能。为了符合不同技术 人员的需要,涉及的技术有J2ME,Nokia SDK,SONYERISON SDK 等。 由于在移动设备,如手机、手持电脑和其它智能设备上大多数都支持 java 技术。我 们常见到的彩信、手机游戏等也大多是使用 java 开发的,而随着手机功能的不断提高, 越来越多的开发人员逐步转向手机和其它移动设备应用开发上。因此本书专门针对 java 移动开发进
2、行详尽的介绍,并介绍了多个游戏案例,以便满足不同层次的读者需要。 本书可以作为学生的课外参考书,也可以作为希望从事手机方面开发的初学者的入门 图书,以及从事手机开发的技术人员的参考资料。为方便读者学习,本书将配有案例代码 光盘,以便读者可以进行深入研究。3 目录 第 1章 移动开发基础8 1.1 移动应用简介8 1.2 必须安装的软件.10 1.3 安装 NDS_J2ME_V_2_010 1.3.1 安装软件.10 1.3.2 开发经验与体会12 第 2章 建立 .JAR 文件和 .JAD 文件.13 2.1 编写 JAVA源代码13 2.2 编译并预验证.18 2.3 封装MIDLET20
3、2.3.1 MIDlet套件20 2.3.2 Java档案文件21 2.3.3 Java应用程序描述器文件(JAD).22 2.4 创建 JAR/JAD文件23 2.5 运行 JAD 文件25 2.6 使用 NOKIASDK运行程序.25 2.7 在 JBUILDER里正确显示中文.27 2.8J2ME简介28 2.8.1 基本概念.28 2.8.2 J2ME 总体架构29 2.8.3 J2ME 目标设备29 2.8.4 开发经验与体会31 第 3章 J2ME 开发技术实例分析32 3.1 在CANVAS画布上设计屏保程序32 3.2LIST 和ALERT 设计一个选择清单35 3.3CANV
4、AS和GRAPHIC直接处理绘图及按键.38 3.4J2ME 数据应用45 3.4.1 例一:简单的开,关,读,写的动作47 3.4.2 例二:简单的以数据流方式来开,关,读,写.50 3.4.3 范例三:简单的数据排序54 3.4.4 范例四:简单的数据查询56 3.4.5 范例五:简单的数据事件通知及处理59 第 4章 手机彩图程序开发624 4.1 程序开发环境.62 4.2 程序开发目标.62 4.3 程序设计过程.63 4.4 类库设计.69 4.5 采用的关键技术.71 4.5.1 手机程序设计.71 4.5.2 手机程序设计介绍71 4.5.3 MIDP 图形处理类别函示库.72
5、 4.5.4 Display 类别.72 4.5.5 Canvas 类别.72 4.5.6 MIDlet 程序结构.75 4.6 开发经验与体会.76 第 5章 游戏开发基础.77 5.1 游戏制作的主要流程.77 5.2 游戏设计基本论.77 5.3 时代背景.78 5.4 模式.79 5.5 技术.79 5.6 表现手法.79 5.7 针对移动设备的设计策略80 第 6章 井字游戏.81 6.1 玩法与算法.81 6.2 程序设计.81 6.2.1 概述.81 6.2.2 井字游戏的 MIDlet类.82 6.3TICTACTOEMIDLET.JAVA 程序.84 6.4CHOOSEPIE
6、CESCREEN.JAVA.101 6.5TICTACTOE.JAD103 6.6 开发经验与体会103 第 7章 手机图形处理104 7.1 全屏画布104 7.2 绘制和填充三角形及多边形.104 7.3 绘制反转及旋转图片105 7.4 透明支持106 7.5 创建可变图片的特别方法.1075 7.6 对图片象素数据的底层访问.108 第 8章 手机音乐播放112 8.1 播放单音112 8.2 播放简单曲调112 8.3 音调状态模型和 SOUNDLISTENERS114 8.4 音量设置115 8.5 播放声音文件115 第 9章 游戏特效设计117 9.1 控制振动117 9.2
7、控制屏幕背景灯光117 9.3 闪烁灯118 第 10章 手机电影播放.119 10.1 程序设计.119 10.2 播放器状态模型.119 10.3 播放单音和序列音乐.120 10.4 播放声音和 MIDI121 10.5 播放视频.121 10.6 拍照.122 第 11章 播放器程序设计.124 11.1 用户界面设计.124 11.2 软件设计.125 11.2.1 MediaSamplerMIDlet 类125 11.2.2 MediaList 类.128 11.2.3 VideoCanvas 类.135 11.3 应用程序相关文件.141 11.4MS 开发工具142 11.5
8、创建 MS 消息.143 第 12章 移动游戏界面设计146 12.1 各种移动游戏界面.146 12.2MIDP 高级 API146 12.2.1 它们适用于哪些场合146 12.2.2 示例程序.147 第 13章 MIDP 2.0 高级编程1516 13.1DISPLAY (显示)151 13.2DISPLAYABLE (可显示对象)152 13.3FONT(字体).152 13.4FORM (表单)152 13.5LAYOUTS (布局).153 13.6 命令和项目.156 13.7APEARANCE(显现)模式.159 13.8CUSTOMITEM (客户定制项目).161 13.
9、9SPACER和ALERT.163 13.10CHOICE、CHOICEGROUP 和 LIST166 13.11 其它关键类167 13.12GRAPHICS和IMAGE168 第 14章 手机游戏开发过程详解169 14.1 手机游戏限制.169 14.2 显示尺寸和颜色.169 14.2.1 手机界面.170 14.2.2 缺少类.171 14.2.3 我们和用户的性能指的是什么171 14.2.4 提高性能的方法171 14.2.5 编码提示.173 14.2.6 游戏设计.173 第 15章 牧羊犬游戏设计175 15.1 游戏类设计.175 15.2 游戏多媒体设计.179 15.
10、3 游戏图形处理.180 15.3.1 透明性.180 15.3.2 模式全屏.180 15.3.3 震动和背景灯光181 第 16章 J2ME 多媒体游戏.183 16.1 概述.183 16.2 多媒体操作.183 16.3MAPI 包185 16.4 使用MAPI187 16.5 媒体播放器.192 第 17章 手机游戏案例.1987 17.1 概述.198 17.2 开发工具.198 17.3 吃豆豆游戏.200 17.3.1 FrameTrigger.java.201 17.3.2 GameBoard.java202 17.3.3 GameBoardFactory.java205 1
11、7.3.4 GameCanvas.java.207 17.3.5 GhostActor.java.210 17.3.6 GridNode.java214 17.3.7 IntroScren.java.217 17.3.8 pacman.java218 17.3.9 PacmanActor.java.220 17.4 矿工马坞游戏.227 17.4.1 Cobject.java227 17.4.2 Dynamic.java.231 17.4.3 Frame.java.252 17.4.4 M.java254 17.4.5Main.java255 17.4.6 Miner.java.334 17.
12、5BUBBLET 游戏.352 17.5.1 Bubblet.java353 17.5.2 BubbletCanvas.java354 17.6 格档游戏.373 17.6.1 BlockGame.java.374 17.6.2 GraphicJ2ME.java.387 第 18章 开发测试.389 18.1 应用软件的性能和可靠性389 18.2 应用软件的安全性.389 18.3 手机软件的安装.390 18.4J2ME 应用软件测试390 第 19章 技术要点总结.3928 第1章 移动开发基础 1.1 移动应用简介 移动增值业务的分类方法多种多样,从业务的承载方式上可以分为基于信令的业
13、务 (如短消息)、电路型数据业务(如 GSM、CDMA等 2G 网络上的数据业务)、分组数据业务(如 GPRS、cdma2000、W-CDMA 等 2.5G/3G 网络上的中、高速数据业务);从业务提供的功能上 可以分为消息类业务(如短消息、多媒体短消息等)、交易类业务、游戏类业务、基于位置 的业务、浏览类业务、邮件业务等等;从移动增值业务涉及的技术上可以分为智能卡应用 工具箱业务(如 STK/UTK 业务)、WAP 业务、JAVA业务、BREW 业务、GPSone业务等等。 1. 基于智能卡的应用工具箱业务 基于智能卡(注:这里将 GSM 使用的 SIM 卡和 CDMA 使用的 UIM 卡统
14、称为智能卡)的应 用工具箱技术(STK/UTK)是一种通过短消息方式传输的增值业务平台,这个技术主要由移 动终端和智能卡来实现。应用工具箱最早是由 ETSI 的标准(GSM11.14 SIM 卡应用工具箱) 定义的, 在此基础上, 3GPP2于2002年为CDMA的UIM卡制定了CAT标准(CDMA Application Toolkit)。应用工具箱是在智能卡和移动终端之间定义了一套命令和过程,借助于这些命 令和过程可以使一些不依赖于移动终端的应用在智能卡上独立的运行。从逻辑上说,智能 卡应用工具箱完全独立于 SIM 卡上的 GSM 功能以及 UIM 卡上的 CDMA 功能。应用工具箱采 用
15、菜单驱动的方式,通过移动终端和智能卡之间使用一套独立的命令交互,从而将用户的 业务请求以短消息的方式发送到 CP,并将 CP 提供的信息仍然以短消息的方式返回并显示 在移动终端屏幕上。 应用工具箱执行与移动终端相关的过程主要包括: l 概要信息下载过程; l 主动式(Proactive)智能卡过程; l 下载数据到智能卡上的过程; l 菜单选择过程; l 呼叫控制过程; l MO 短消息控制过程; l 事件下载过程等等。 2. 基于多媒体消息的业务 随着文本短消息的商业运营模式在全球取得的巨大成功,多媒体消息(MMS)业务应运 而生。MMS 能够提供点到点、点到应用、应用到点的内容更加丰富的多
16、媒体消息存储和转 发服务。消息可以是纯文本、图片、视频、音频及其它媒体格式组成的非实时内容。9 多媒体消息系统还可以实现将多媒体消息通过 SMTP 协议发送到被叫用户的邮箱里, 这样当被叫用户的移动终端不支持多媒体消息功能时,可以收到多媒体消息到达通知,这 个通知是以普通短消息方式传送的,用户在收到这个通知后,可以通过计算机直接访问自 己的邮箱查看收到的多媒体消息内容。这个功能在多媒体消息业务发展的初期,支持多媒 体消息的移动终端尚未普及的时候,具有一定的市场培育效果。 3. 基于 IMAP4 的多媒体邮件业务 多媒体邮件业务将互联网上最为常用的电子邮件业务引入了移动通信领域。与互联网 上的电
17、子邮件不同的是,在互联网上使用最为普及的邮件接收协议是 POP3 协议,而在移 动邮件业务中,更多的使用 IMAP4 协议(IETF:RFC2060)作为邮件接收协议。IMAP4 协议是 移动终端邮件客户端与邮件服务器之间的协议,事实上在使用 IMAP4 协议时,也并不是将 整个 IMAP4协议全部拿来用,而是对 IMAP4协议进行一些优化,只保留正常接收邮件必要 的命令,尽量减少交互过程以控制资源的开销。优化包括缩减命令集、去除命令中不需要 的参数等。 用户可以将各种格式的文本信息、图片、音频、视频文件作为附件进行接收和发送。 附件的大小可以根据网络的数据承载能力和移动终端的处理能力从几十K
18、字节到几百K字 节。接收和发送邮件所使用的邮箱可以是移动网络中分组数据网内的专用邮箱,也可以是 互联网上通用的个人邮箱,具有很大的灵活性。 4. 基于 WAP的浏览业务 WAP(无线应用协议)的规范自从推出之后曾经热过一阵,但由于当时的移动通信网络 只支持数据速率很低的电路型数据, 再加上支持 WML的网站数量太少, 可浏览的资源有限, 因此 WAP 业务的发展并不理想。随着 WAP标准的完善、移动网络数据速率的提高、用户需 求的扩大,WAP 业务日益普及。 5. 基于 GPS的定位业务 定位业务根据定位精度可以分为三类: 基于 CELLID的定位方式。根据移动台报告所处的小区 CELLID
19、由后台服务器判断用户 所在的小区。根据小区的大小,一般的定位精度为几百米。 基于 AFLT(高级前向链路三边测量)的定位方式。通过确定来自三个基站信号的时间 差,可以确定移动台的位于围绕任意两个基站的一个特定的椭圆上,三个椭圆的交点即为 移动台的位置。定位的精度在100 米左右。 基于 GPS 卫星的定位方式。移动台需要接收至少 4个GPS 卫星信号,并将接收的信号 发送到网络专用的 PDE(位置确定实体),进行位置计算并将最终的精度、纬度等位置信息 或由位置信息转换成的地图等信息返回移动台。这种方法的定位精度最高,理想环境中可 以达到 10 米左右。 目前基于 GPS 的定位在 CDMA 网
20、络上已经开始商用,由于 3GPP2 基于 DBM(数据突发消 息)的标准制订尚未最终完成,运营商纷纷采用实现更加简单的 TCP/IP 方式,即将定位操10 作所需的网络单元 MPC(移动定位中心,用于用户认证、业务管理)和 PDE,脱离移动网络 的电路域而直接放在分组域中,移动台通过 TCP/IP直接与 MPC、PDE 进行交互。 6. 基于 JAVA 的业务 J2ME(JAVA 2 Micro Edition)是 JAVA 2 标准中专门针对小型移动设备的一个版本。 标准包括 CLDC 和 MIDP 两部分,规定了 KJAVA 环境的KVM(KJAVA 虚拟机)、configuration
21、和 Profile。 CLDC(Connected Limited Device Configuration,连接受限的设备配置)规定了系统 类、数据类型类、集合类、输入/输出类等标准 Java类库和专门用于小型无线互联设备的 类库, 同时规定了国际编码和属性的支持。 CLDC 设计了通用连接框架, 动态调用网络协议, 可以映射到任何底层硬件。CLDC 向上层提供 Java 应用的 API 接口。CLDC 负责对 Java 应 用进行下载和安装、检查和保存、选择和运行以及删除的功能。 MIDP(Mobile Information Device Profile,移动信息设备概要)创建了开放的应
22、用 开发平台的一种体系结构和一系列扩展的 Java库。MIDP 规范从用户接口、网络、数据库、 定时器四个方面扩展了 CLDC,以为应用提供 API。MIDP 规定的 JAVA 扩展可以对底层设备 进行调用,提升 JAVA 应用的表现力。目前 J2ME 的 2.0 版本规范已经发布,增加了更多的 扩展。当然除了上面介绍的这些技术之外,随着 3G 技术的不断成熟,更高的数据承载能力 以及对业务更高的 QoS 保证,又为流媒体、可视电话等视频技术提供了发展的空间。 1.2 必须安装的软件 在进行开发之前,必须搭建好开发环境,具体要安装的软件及安装顺序为: 1、 操作系统:Windows 操作系统。
23、 2、 java 语言JDK,可以使用 sun 公司的 jdk1.4,也可以使用JBuilder 中自带的 jdk。 3、 手机开发JDK,即 sun 公司的 J2MEWTK 软件包,也可以使用 Jbuilderx 自己的 手机开发工具包. 4、 Nokia 公司的开发工具包:nds_jme_v_2_0 ,就是 Nokia Developers Suite for the Java 2 Platform,Micro Edition2.0 以上。 1.3 安装 nds_j2me_v_2_0 1.3.1 安装软件 在安装 nds_jme_v_2_0 的时候,选择 Integrated with B
24、orland Jbuilder 会自动检测出 我们的Jbuilderx 目录。(见图 11) 。11 图11 安装完成后,进入Jbuilderx,然后进行一下操作: 1、 选择 tool 菜单的 configure SDK。 图12 配置 2、 选择 new按钮。 3、 选择按钮,配置新的JDK。12 图13 选择jdk 4、 选择我们安装的 Nokia 软件目录下的 Emulators/Nokia_xxx_MIDP_SDK_xxx 目 录。其中,xxx 是 Nokia 手机型号以及JDK 版本号。 配置完成后,用JBuilder 打开 Nokia_Developers_SuiteMidpex
25、amplesHelloExamplesHelloExamples.jpx 这个工程。 如果不成功,请查看 Project 是否使用的为刚建立的 JDK。到这个时候,Jbuilder 已 经具有了编辑 Nokia 手机程序的能力。 另外,要注意 project 的属性中的 JDK的设置也要为 wireless tools。否则将无法编译通 过。 1.3.2 开发经验与体会 在安装 JbuilderX 的时候,如果在 windows 2003 上安装,一定要首先修改安装程序 的兼容属性为 windows 2000 兼容,这样才能正常安装,具体方法如下: 1、 打开资源管理器。 2、 选择 Jbui
26、lderX 的安装文件。 3、 按鼠标右键,选择“属性” 。 4、 在“兼容性”中,选择“windows 2000” 。 然后重新运行安装程序,这样就可以正常安装了。另外,一定要先安装 JbuilderX, 然后再安装其它厂商的 SDK,如 nokia 的 SDK,并选择相应设置,才应让这些 SDK 自 动与 JbuilderX 开发环境集成, 否则, 将无法在 JbuilderX 中看到这些 SDK 的操作菜单。13 第2章 建立 .jar 文件和 .jad 文件 这两个文件是手机程序开发的最终运行文件。不同于.exe,这两个文件是最终在手机 上运行的。因此,在编写完程序并调试完毕后,必须生
27、成这两个文件,在能通过网络等方 法下载到手机上来使用。更多细节将在以后讲述,本章主要从 jbuiler 操作角度,讲述如何 在 jbuilder 中产生这两个文件。 要注意的是,可以通过其它 java 命令或者工具来生成这些文件,并不一定使用开发 工具本身来生成这些文件,并且,有些开发工具还不具备这样的功能。 编写手机程序需要使用的类库是 MIDlet。在编写 MIDlet 程序之前还要再说两句,前 面说过了 MIDP 程序称为 MIDlet , 这可能因为所有的 MIDlet 都是扩展 javax.microedition.midlet.MIDlet 类 (正象 Java aplet 扩展
28、Applet 类一样) , 除了从键盘或 点击设备上接受输入的信息以外, MIDLet 类还提供用于激活、暂停和终结 MIDlet 的接 口,即分别是 startAp()、pauseApp()和 destroyApp() 方法。startApp()方法在概念上与 Java aplet 的 start()方法类似,当 MIDlet 启动时其被调用,而且在一个 MIDlet 暂停之后恢复 时也被调用。 另外一个值得注意的类是 javax.microedition.lcdui.Command 类。这个类定义了好几个 移动设备通常使用的语义类型: BACK、CANCEL、EXIT、HELP、ITEM、
29、MENU、OK、 SCREEN 和 STOP。通过 javax.microedition.lcdui.Displayable类(所有的 J2ME UI组件的 父类)中的 adCommand()方法,把这些命令添加到用户界面上。adCommand()方法包括 一个优先级参数,允许应用程序提示运行时刻环境应当按照什么顺序显示什么内容。在大 多数环境中,如果两个相同类型的命令被使用相同的优先级水平添加的话,环境将显示一 个菜单 “ menu “选项,并允许用户从多个命令选项中选择。 2.1 编写 Java源代码 在编写代码之前,创建一个新目录,用来保存以后开发用到的资源。这一点很重要, java 开
30、发是靠磁盘目录结构来维护的,典型的编程目录结构见图 21。14 图21 目录结构 保存我们以后编写的 MIDlet,例如 c:midlets,在这个目录里再创建一个叫 myMIDlet 的目录。按照以下步骤,开始建立程序: 1、 启动 jbuilderx。 2、 选择 file菜单的 new project。 3、 在 name 中,输入;在 directory 中,单击按钮,选择刚才建立的 myMIDlet 目录。4、 单击 next,在 JDK 中,选择一个 wireless 类型的 JDK,这里使用 jbuilder 自带的 JDK,这一步很重要。15 图22 选择 JDK 5、 单击
31、next,然后单击 finish,完成处理,则出现了新的 project 文件。 图23 新项目界面 6、 选择 file菜单的 new,新建一个 java 文件,在出现的对话框中,选择 micro类型。16 图24 新对象界面 7、 选择 MIDP midlet 类型,单击 ok。 8、 在 class name中,输入名为 simpleMIDlet,清除 package列表中的内容,保持空 白。 图25 新package 名称 9、 单击 next,输入其它信息,也可以使用默认值。 10、 单击 next,输入 name为 simpleMIDlet。17 图26 新配置名称 11、 单击f
32、inish完成操作, 则生成了simpleMIDlet.java文件。 输入下面这一段 Java 源代码,替代现有的该文件中默认的内容。注意,还有一个 displayable1.java 文件,以后 使用。 这里, 双击 simpleMIDlet.java 文件, 进行编辑。 把这个文件保存在 c:midletsmyMIDlet 目录 。 /simpleMIDlet.java import javax.microedition.midlet.* import javax.microedition.lcdui.* public class simpleMIDlet extends MIDlet
33、implements ComandListener private Display display / 引用 MIDlet的 Display 对象 private TextBox tbxMain / Textbox 显示一条消息 private Comand cmdExit / 设定按钮用于退出MIDlet / MIDlet构造程序 public simpleMIDlet() display = Display.getDisplay(this) cmdExit = new Comand(“Exit“, Comand.SCREN, 1)18 tbxMain = new TextBox(“Simp
34、le MIDlet“, “Welcome “, 50, 0) tbxMain.addComand(cmdExit) tbxMain.setComandListener(this) / 被应用程序管理器调用来启动MIDlet。 public void startApp() display.setCurrent(tbxMain) / 一个必要的方法 public void pauseApp() /一个必要的方法 public void destroyApp(boolean unconditional) /检查一下是否选择了退出命令 public void comandAction(Comand c
35、, Displayable s) if (c = cmdExit) destroyApp(false) notifyDestroyed() 此时,先不必担心每行代码是做什么用的,把注意力放在开发这一整体环节中。这些 代码是 jbuilderx 根据我们选择的项目类型和类的类型,自动生成的程序基本结构,方便 我们以后编写代码。 2.2 编译并预验证 现在必须编译 java 源文件,并且编译验证生成的.class 文件。需要经过以下过程来完 成这些步骤:19 1、 选择 displayable1.java,按鼠标右键,选择 delete displayable1.java,删除该文件。 2、 编译
36、源代码。选择 project 菜单的 make project 。 3、 顺利地编译 simpleMIDlet.java 则生成 simpleMIDlet.class 文件 (默认情况下, 生成 的.class 位于 classes 目录) 。 4、 只要没有出现 simpleMIDlet.java 编译错误就行了。错误信息出现所在屏幕下方的 message窗口中,颜色为红色。 注意:前面的 preverify 命令行选项将用一个新的、预验证过的类文件覆盖原先的类 文件。我们可以分两个目录,一个用来保存通过编译的类文件,另一个用来保存通过预验 证创建的类文件。但是没有经过预验证的类文件是不能被
37、应用程序管理器载入的。 运行 simpleMIDlet,选择 run 菜单的 run project,则可以看到出现了一个默认的手机 模拟器,该模拟器是 jbuilder 所带的 wireless toolkit 自带的。 启动手机模拟器 显示运行结果 图27 在模拟器中查看程序结果 点击手机模拟器上的 select 键,可以看到运行结果。关闭手机模拟器窗口。这个手机 模拟器是 J2ME 自带的,我们也可以使用 Nokia SDK 模拟器来查看运行结果。具体方法 是:20 1、 在 jbuilderx 环境中,选择 tools。 2、 选择其中的 nokia developers suite
38、for j2me。 3、 选择其中的 start emulator。 图28 运行模拟器 也可以直接从系统开始菜单的程序中,直接运行 Nokia 开发套件,并启动模拟器,选 择生成的 .jad 文件,并运行程序,有关 jad 文件方面的内容,后面有详细讲述。 2.3 封装MIDlet 下面讲述封装 MIDlet 的相关知识,即介绍一下 MIDlet 套件以及 Java 档案和应用程 序描述器文件, 为了说明方便, 我们还将写一个MIDlet程序, 并利用上面介绍的那个MIDlet 程序,并创建JAR 文件和JAD 文件来封装这些程序。我们还要看如何使用 Java 程序包改 变我们的开发过程。
39、2.3.1 MIDlet 套件 虽然把 MIDlet 封装进 Java 档案文件(JAR)并不一定必要,但这是发布 J2ME/MIDP 应用程序最常见的方法。 MIDlet 套件是一个 MIDlet 中所有的文件以及作为 MIDlet 一部分 必需的资源的集合。MIDlet 套件由以下几部分组成: 1、 附在JAR 文件中的 Java 类文件。 2、 描述 JAR 文件内容的清单文件。 3、 附在 JAR 文件中的资源(如图象)和Java 应用程序描述符文件(JAD)。 4、 应用程序管理器。21 应用程序管理器是一个移动设备上的软件程序,这个应用程序与具体的设备有关,并 且由设备的生产商实现
40、。它负责安装、运行以及从设备上删除 MIDlet,而提供错误处理 支持。这个应用程序管理器同时还提供一个可选界面,允许用户启动、终止以及删除 MIDlet。 2.3.2 Java 档案文件 一个商品化的、封装过的应用程序通常由许多文件构成。除了 Java 类以外,其它文 件诸如图像和应用程序数据即通常所说的资源,也可能是这个程序包的一部分。我们把所 有这些信息捆绑进一个整体,就称为 JAR 文件。 除了类和资源文件,一个 JAR 文件还包括描述 JAR 内容的清单文件。清单文件名为 manifest.mf,储存在 JAR 文件本身中,下面这张表中列出定义在这个清单文件中的所有可 用的属性。 表
41、21 jar 文件内容 属性 用途 MIDletName MIDlet 程序包的名称。例如“Game Pack” MIDletVersion MIDlet的版本号 MIDletVendor MIDlet的创建者或提供商 MIDletIcon 应用程 序管理器把这个图标与 MIDletName 相关联,这是一个图形文件, 以 PNG图象格式储存。 MIDletDescription 描述 MIDlet的文本 MIDletInfoURL 可能提供更多 MIDlet 和/或供应商信息 的 URL MIDlet 这个属性包括三段信息: MIDlet名称:用于这个 MIDlet的图标 (可选)应用程序管
42、理器将调用来载这个 MIDlet的类名,在我们的例子中,有两个条 目 : MIDlet1: KOF, /images/kof.png, kof.kofMIDlet MIDlet2: Golf, /images/golf.png, golfMIDlet MIDletJarURL JAR文件的 URL MIDletJarSize JAR文件的大小 MIDletDataSize 持久数据存储必需的最小字节数 MicroEditionProfile MIDlet需要哪一种 J2ME简表22 属性 用途 MicroEditionConfigur ation MIDlet需要哪一种 J2ME配置 这些属性
43、并不是全部都需要,可是,没有下面列出的这六个,应用程序管理器就会拒 绝加载这个 JAR。 MIDletName MIDletVersion MIDletVendor MIDlet MicroEditionProfile MicroEditionConfiguration 这里有一个简单的清单文件的例子: MIDletName: KOF2001 MIDletVersion: 1.0 MIDletVendor: NeoRage Corporation Inc. MIDlet1: kof, /images/kof.png, kof.kofMIDlet MicroEditionProfile: MID
44、P1.0 MicroEditionConfiguration: CLDC1.0 2.3.3 Java 应用程序描述器文件(JAD) 虽然没有必要, 我们仍然可以在 JAR 文件中包含一个 JAD 文件, 就像清单文件一样, 这个文件也包含 MIDlet 的信息。创建一个 JAD文件基于两个原因。 1、 向应用程序管理器提供信息,说明 JAR 文件的内容,使用这些信息,就可以判 断一个 MIDlet 是否适合运行在这个设备上。例如,通过查看属性 MIDletDataSize,应 用程序管理器可以确定 MIDlet 是否需要比设备可以提供的更多内存。 2、 提供一种方法,可以把参数传送到 MIDl
45、et 而不必更改 JAR 文件,在本文的后半 段,我们将看到一个这样的例子。 JAD 文件使用表 2.1 中相同的属性。如果我们需要创建我们自己的属性,也可以办得 到,只要使用不以 MIDlet 为开头的属性名就可以了,下面的 showProperties.jad文件就是 自定义属性的例子。和清单文件一样,某些属性必须被定义,如果这些属性不可用的话, 应用程序管理器将不加载这个 MIDlet,它们是: MIDletName23 MIDletVersion MIDletVendor MIDlet MIDletJarURL MIDletJarSize MIDletName、MIDletVersio
46、n 和 MIDletVendor 的值必须与 JAR 中的清单文件中相 同的属性值一致。可以看出,如果在这两个文件有什么不同的话,申请管理器也不会加载 这个 JAR。 除了这些属性以外,如果两个文件中的另外名称相同的属性,但是属性值不相同的, 将优先采取应用程序描述器文件 ( JAD )属性。 MIDP 1.0 规范没有规定 MIDletn属性是 JAD 文件的必需属性。 可是, 没有这个属性, 就没有办法在设备模拟器中预览 MIDlet。在两个文件中包含这个属性没有问题,并且事 实上,那么做可以更清楚看出这些文件是怎样关联的。因此,出于完整性考虑,这里的所 有例子都将在JAD 文件中包含 M
47、IDletn属性。下面是一个非常简单的例子: MIDletName: Note Pad MIDletVersion: 1.0 MIDletVendor: ABC WorkGroup. MIDletJarURL: http:/ MIDletJarSize: 26248 MIDlet1: NotePad, /images/NotePad.png, NotePad.Main 2.4 创建 JAR/JAD 文件 在 jbuilder 中创建 jar/jad文件的方法: 1、 选择 wizard菜单中的 archive builder。 2、 在出现的窗口中,选择 archive type为 MIDle
48、t。24 图29 第一步 3、 选择 next,在 name 中输入 simpleMIDlet,注意下面提示文件保存的位置。同时 生成两个文件.jar 和.jad。 图210 第二步 4、 选择 next,浏览每个步骤,但不用操作,以后会学习到。这里不需要设置。最后 单击 finishi,则生成文件。25 图211 生成文件 5、 重新生成 project。 2.5 运行 JAD 文件 可以直接运行生成编译后的JAD 文件。方法是: 1、 选择.jad文件。 2、 按鼠标右键,选择 micro run using xxx,这里的 xxx是我们的 midlet 档案名称, 出现的结果和前面运行的
49、结果相同。 图 212 运行 jad 2.6 使用nokia SDK运行程序 也可以使用 nokia SDK 运行程序,方法是:26 1、 选择要运行的 jad文件。 2、 选择 tool 菜单中的 nokia develpers suite for j2me。 3、 选择 start emulator。 4、 选择一种模拟器,并选择 emulator。 图213 nokia 模拟器 运行结果一样,只是在 nokia 手机模拟器里运行,而不是在 jbuilder 默认的模拟器中运 行。27 图214 运行结果 2.7 在 jbuilder 里正确显示中文 如果我们的程序代码中有中文,默认情况下,jbuilderx 可能会显示为怪字符。那么, 为了能够在程序中使用中文,我们需要作一些操作。 关闭JBuilderX,修改 JBuilderXbin 目录下的 jbuilder.c