第一篇 J2ME基础知识 1
第1章 J2ME简介 1
1.1 Java版本的演进 1
1.1.1 Java的演进历史 1
1.1.2 Java 1平台 2
1.1.3 Java 2平台 2
1.2 各种Java版本的定位 2
1.2.1 Java不同版本之间的关系 2
1.2.2 J2SE、J2ME、J2EE和Smart Card 2
1.2.3 不同Java版本的虚拟机 3
1.3 J2ME与手机编程的关系 3
1.3.1 手机编程的历史 4
1.3.2 手机上的Java开发平台——J2ME 4
1.4 Java程序开发简述 4
1.4.1 各种Java版本的程序开发关系 5
1.4.2 Java程序开发流程 5
1.5 J2ME简介 6
1.5.1 使用配置对不同设备进行抽象 6
1.5.2 使用框架对API进行定义 6
1.5.3 J2ME系统体系结构 7
1.5.4 J2ME已有的配置和框架 7
1.5.5 J2ME的技术特性 7
1.6 CDC、CLDC和MIDP简介 8
1.6.1 CDC和CLDC简介 8
1.6.2 典型框架简介 9
1.7 J2ME的一些参考网站 9
1.7.1 主要J2ME的Web站点 9
1.7.2 主要的J2ME讨论区 10
本章小结 10
习题一 11
第2章 J2ME开发环境 12
2.1 JDK的安装和配置步骤 12
2.1.1 安装软件的过程 12
2.1.2 开发环境的配置 12
2.1.3 检查配置是否正确 14
2.2 第一个例子——HelloWorld.java 14
2.2.1 HelloWorld.java的源代码 14
2.2.2 编译、预校验和运行 15
2.2.3 批处理——快速开发的技巧 16
2.2.4 开发MIDlet的完整流程 17
2.3 在网络上发布MIDlet程序 18
2.4 使用J2ME Wireless Toolkit 20
2.4.1 J2ME Wireless Toolkit的硬件和软件要求 20
2.4.2 J2ME Wireless Toolkit的安装步骤 20
2.4.3 在J2ME Wireless Toolkit中运行例子程序 22
2.4.4 在J2ME Wireless Toolkit中创建自己的程序 23
2.4.5 J2MEWTK中的模拟设备简介 25
2.4.6 在J2MEWTK中进行MIDlet的打包 26
2.5 使用Eclipse开发J2ME程序 27
2.5.1 Eclipse概述 27
2.5.2 Eclipse的安装和配置 27
2.5.3 使用Eclipse开发HelloWorld程序 27
本章小结 29
习题二 29
第3章 CLDC和MIDPAPI简介 31
3.1 CLDC/MIDP开发环境 31
3.1.1 MIDlet简介 31
3.1.2 应用程序可移植性 31
3.2 CLDC API简介 31
3.2.1 java.lang 32
3.2.2 java.io 32
3.2.3 java.util 33
3.2.4 javax.microedition.io 34
3.3 MIDP API简介 34
3.3.1 java.util 34
3.3.2 javax.microedition.rms 35
3.3.3 javax.microedition.midlet 35
3.3.4 javax.microedition.io 36
3.3.5 javax.microedition.lcdui 36
3.3.6 MIDP中增加的功能 37
3.4 HelloMidlet的详细解释 38
3.4.1 总体运行功能 38
3.4.2 各部分代码功能 40
本章小结 41
习题三 42
第二篇 程序设计方法 43
第4章 J2ME的用户界面编程 43
4.1 J2ME界面编程概述 43
4.1.1 Display类和屏幕显示部件 43
4.1.2 典型的屏幕显示部件 44
4.1.3 界面设计部件的层次关系 49
4.2 如何使用Display类 50
4.2.1 获得MIDlet的Display类 50
4.2.2 显示Displayable部件 50
4.3 使用Screen类和滚动条 50
4.3.1 Screen类的基本属性 50
4.3.2 在Screen中使用滚动条 51
4.4 使用命令按钮响应用户操作 52
4.4.1 创建命令按钮 52
4.4.2 设置命令按钮的响应函数 53
4.4.3 使用命令按钮的例子 53
4.5 使用文本框(TextBox)输入信息 54
4.5.1 创建一个文本框 54
4.5.2 文本框的演示例子 55
4.6 使用报警显示(Alert)提示信息 58
4.6.1 两类报警:timed和modal 58
4.6.2 如何使用报警 58
4.6.3 演示报警使用的例子 59
4.7 向用户提供选择——列表(List) 60
4.7.1 生成一个列表 60
4.7.2 响应用户对列表的操作 60
4.7.3 使用列表的完整例子 62
4.8 显示或改变值的大小——标尺(Guage) 64
4.8.1 标尺的两种类型——交互标尺和非交互标尺 64
4.8.2 交互式标尺 65
4.8.3 非交互式标尺 66
4.9 有效地校验用户输入 68
4.9.1 监测部件状态的变化——ItemStateListener接口 68
4.9.2 对用户输入的字符进行校验 68
4.9.3 输入电话号码的例子 71
4.10 处理日期和时间(DateField) 73
4.10.1 使用DateField 73
4.10.2 设置正确的日期和时间 74
4.10.3 clearDate()和combineDateTime() 74
4.10.4 使用日期和时间的完整例子 75
4.11 定时执行任务(Timer) 78
4.11.1 定时器——Timer 78
4.11.2 调度任务的方法 79
4.11.3 星空模拟程序 79
4.12 综合例子——股票价格跟踪程序 81
本章小结 84
习题四 84
第5章 J2ME数据库编程 86
5.1 RMS的表——Record Store 86
5.1.1 操作Record Store的方法 86
5.1.2 Record Store的维护信息——Header 88
5.1.3 获得Record Store的其他信息 89
5.1.4 Record Store的限制 89
5.2 在Record Store中操作记录 89
5.2.1 添加记录 90
5.2.2 删除记录 91
5.2.3 修改一条记录 92
5.2.4 监视记录的改变 95
5.2.5 Record Store中记录号的重用问题 97
5.2.6 使用RecordEnumeration遍历记录 98
5.3 创建多列表格 101
5.3.1 编码和解码的方法 101
5.3.2 多列表格的保存 102
5.3.3 检索多列表格 104
5.4 使用RecordComparator对记录进行排序 105
5.4.1 实现RecordComparator接口 105
5.4.2 数据库排序的例子 105
5.5 使用RecordFilter查找记录 108
5.5.1 实现RecordFilter接口 108
5.5.2 查找记录的例子 109
5.6 高效使用RMS的方法 112
5.6.1 减少写记录次数 112
5.6.2 减少读记录次数 113
5.6.3 防止出现“抖动” 114
5.6.4 重用数组 114
5.6.5 高效率使用RMS的例子 115
本章小结 118
习题五 119
第6章 J2ME的网络编程 121
6.1 J2ME的网络连接框架 121
6.1.1 J2ME的网络连接层次 121
6.1.2 J2ME支持的网络协议 122
6.1.3 例子:StreamConnection通信 123
6.2 使用HTTP协议通信概述 124
6.2.1 HttpConnection类 125
6.2.2 例子:访问Web Service 126
6.3 使用HTTP协议发送和接收数据 129
6.3.1 HTTP协议通信模型 129
6.3.2 发送数据的方法 130
6.3.3 接收数据的方法 132
6.3.4 服务器端的程序 133
6.3.5 例子1:使用HTTP协议发送和接收文本数据 135
6.3.6 例子2:使用HTTP协议发送二进制数据 138
6.4 网络通信中的数据加密 141
6.4.1 MIDlet的安全性 141
6.4.2 使用加密类库 141
6.4.3 一个加密类——Encryptor 142
6.4.4 Encryptor的使用 144
6.4.5 数据加密的完整例子 144
6.5 网络通信中的常用实例 147
6.5.1 从Web服务器上取回一个页面 147
6.5.2 从移动电话上访问Servlet并获得结果 149
6.5.3 与Web服务器建立socket连接 150
6.5.4 从Yahoo获得股票信息 151
6.5.5 Google Map API的使用 155
本章小结 158
习题六 159
第7章 J2ME应用程序的性能优化 160
7.1 代码优化的一些基准 160
7.1.1 内存测试基准 160
7.1.2 时间测试基准 161
7.2 优化内存使用 161
7.2.1 创建和删除对象 161
7.2.2 字符串和字符串缓存 162
7.2.3 正确处理内存不足 162
7.3 优化代码运行速度 163
7.3.1 优化循环 163
7.3.2 使用数组代替对象 163
7.3.3 使用缓存I/O 163
7.3.4 主动清理内存 164
7.4 用户界面的优化 164
7.4.1 显示程序运行的进度 165
7.4.2 开发易于使用的程序 165
7.5 合理地打包应用程序 165
7.5.1 仅仅打包使用的代码 165
7.5.2 使用代码加密保护程序 165
7.6 J2ME的程序兼容性 166
7.6.1 J2ME的程序兼容性 166
7.6.2 JSR介绍 166
7.6.3 JSR兼容性的测试工具 169
本章小结 171
习题七 171
第8章 kAWT编程 172
8.1 在J2ME中使用kAWT 172
8.1.1 在J2ME Wireless Toolkit中使用kAWT 172
8.1.2 命令行方式使用kAWT 173
8.1.3 KawtHello的分析 174
8.1.4 定制编译kAWT类库 175
8.2 kAWTAPI简介 175
8.3 kAWT编程例子 176
本章小结 181
习题八 181
第三篇 高级编程技巧 182
第9章 J2ME的低级用户界面设计 182
9.1 低级用户界面设计概述 182
9.1.1 屏幕显示的基础——Canvas类 182
9.1.2 使用Canvas类的“Hello,World!”例子 183
9.1.3 程序退出的方法 183
9.2 HappyPush——一个详细的例子 185
9.2.1 绘画出屏幕背景 185
9.2.2 响应用户操作 185
9.2.3 使用Image类画出图像 186
9.2.4 响应重复按键或指针移动事件 187
9.3 编写MIDlet的启动画面 191
9.3.1 使用报警的方法 191
9.3.2 使用Canvas类绘制启动画面 193
9.4 编写一个屏幕保护程序 195
9.4.1 如何实现ScreenSaver 195
9.4.2 ScreenSaver的代码 196
9.5 清除屏幕显示内容 199
9.5.1 清除屏幕的实现原理 199
9.5.2 清屏程序的例子 199
9.6 图片处理的例子 201
9.6.1 显示网络上下载的Png图片 201
9.6.2 如何实现滚动显示图像 204
本章小结 210
习题九 211
第10章 J2ME游戏程序设计 213
10.1 在移动电话上开发游戏需要讨论的问题 213
10.1.1 在移动电话上开发游戏的限制 213
10.1.2 开发游戏有利的方面 214
10.2 游戏编程基本技术 214
10.2.1 MIDlet的基本结构 214
10.2.2 使用Canvas对象绘制图形 214
10.3 响应游戏中用户的按键 215
10.3.1 按键事件 215
10.3.2 游戏按键 215
10.3.3 响应键盘事件 215
10.3.4 使用通用按键 217
10.4 使用重复按键简化用户输入 218
10.4.1 判断系统是否支持重复按键 219
10.4.2 模拟重复按键 219
10.4.3 演示重复按键的例子 220
10.4.4 实现连续移动 227
10.4.5 实现加速移动 227
10.4.6 演示连续移动和加速移动的例子 229
10.5 在程序中实现屏幕滚动 237
10.5.1 定时器 237
10.5.2 用定时器实现重复按键 237
10.5.3 使用定时器实现屏幕滚动 238
10.6 实现镜头的移动 241
10.6.1 屏幕滚动和镜头移动 242
10.6.2 镜头移动的实现 242
10.7 在游戏程序中绘制精灵 245
10.7.1 在支持透明图形的系统上实现绘制精灵 245
10.7.2 在不支持透明图形的系统中实现绘制精灵 246
10.8 井字棋的例子 249
10.8.1 井字棋介绍 249
10.8.2 源代码 249
10.9 网络游戏编程 254
10.9.1 网络游戏介绍 254
10.9.2 数据通信的方法 254
10.9.3 简单的网络游戏——NumberPick 255
10.9.4 服务器端的代码 258
本章小结 260
习题十 261
第11章 J2ME的无线消息处理 263
11.1 无线消息与WMA 263
11.1.1 无线消息技术常用术语 263
11.1.2 无线消息传递方式 263
11.1.3 WMA技术 264
11.2 WMA应用示例 264
11.2.1 收发SMS文本短信示例 264
11.2.2 接收CBS文本消息示例 269
11.3 建立WAP和GPRS连接 272
11.3.1 WAP和GPRS简介 272
11.3.2 建立WAP和GPRS连接 272
本章小结 272
习题十一 273
第12章 J2ME的移动多媒体程序设计 274
12.1 MMAPI简介 274
12.1.1 MMAPI中的重要成员 274
12.1.2 MMAPI与MIDP 2.0多媒体API的区别 275
12.1.3 Player的生命周期 275
12.1.4 设备系统多媒体属性 276
12.1.5 MMAPI编程基础 276
12.2 MMAPI编程示例 277
12.2.1 使用单音(Tone) 277
12.2.2 单音序列音乐 279
12.2.3 使用音频资源 281
12.2.4 播放视频资源 282
12.2.5 音频采集 284
12.2.6 视频采集——照相 285
本章小结 285
习题十二 286
第13章 移动软件设计技术 287
13.1 软件体系和计算模型 287
13.1.1 B/S移动计算模型 287
13.1.2 B/S和C/S混合移动计算模式 288
13.2 基于B/S代理的移动计算模型 289
13.3 基于移动Agent的移动计算模型 291
13.3.1 移动Agent的概念 291
13.3.2 移动Agent的优点 291
13.3.3 移动Agent技术的关键问题 291
13.3.4 移动Agent计算模型 292
13.3.5 移动Agent计算模型的特点 293
13.3.6 移动Agent系统的体系结构 293
13.3.7 移动Agent技术的应用和发展趋势 294
13.4 基于广域网的移动计算模型 295
13.4.1 概述 295
13.4.2 基于移动Agent的广域网普适计算模型 296
13.4.3 移动Agent在广域网中的服务迁移机制 297
13.4.4 移动Agent在广域网中的资源迁移机制 299
13.5 信息推送获取方式和Push 300
13.5.1 MIDlet启动过程 301
13.5.2 PushRegistry类 301
13.5.3 静态注册和动态注册 301
13.5.4 监听与启动 303
13.5.5 处理数据 303
13.5.6 动态注册与基于计时器的Push 304
本章小结 305
习题十三 305
第四篇 应用实例分析 306
第14章 手机日志系统的设计和实现 306
14.1 手机日志系统的设计目的与工作现状 306
14.2 系统总体设计 306
14.2.1 系统设计目标 307
14.2.2 系统设计思路 307
14.2.3 系统总体架构 307
14.2.4 系统流程图 309
14.3 服务器端的设计 310
14.3.1 数据库存储层设计 311
14.3.2 Web服务器子系统设计 312
14.3.3 服务器端的代码实现和分析 312
14.4 客户端设计 314
14.4.1 手机客户端程序设计 315
14.4.2 界面设计 316
14.4.3 程序的运行流程 319
14.4.4 手机客户端的代码实现和分析 320
本章小结 321
习题十四 322
第15章 手机考试系统的设计和实现 323
15.1 系统总体设计架构 323
15.1.1 客户端模块管理 324
15.1.2 数据库管理模块 325
15.1.3 题库系统管理模块 325
15.2 试卷设计 325
15.2.1 创建试卷 326
15.2.2 根据用户手机号码查询试卷 327
15.2.3 手机端从服务器端下载题目 328
15.2.4 用户查看以往考试成绩 329
15.3 系统的实现流程 329
15.3.1 客户端流程 330
15.3.2 数据库端流程 331
15.3.3 数据库结构 331
15.4 系统测试和运行效果 333
15.4.1 数据库端运行效果 333
15.4.2 客户端运行效果 335
本章小结 336
习题十五 336
附录 习题参考答案 337
参考文献 343
参考资料 344