第一部分 J2ME基础知识 3
第1章 J2ME简介 3
1-1 Java版本的演进 4
1-1-1 Java的演进历史 4
1-1-2 Java 1平台 4
1-1-3 Java 2平台 5
1-2 各种Java版本的定位 5
1-2-1 Java不同版本之间的关系 5
1-2-2 J2SE、J2ME、J2EE和Smart Card 5
1-2-3 不同Java版本的虚拟机 6
1-3 J2ME与手机编程的关系 7
1-3-1 手机编程的历史 7
1-3-2 手机上的Java开发平台——J2ME 7
1-4 Java程序开发简述 8
1-4-1 各种Java版本的程序开发关系 8
1-4-2 Java程序开发流程 8
1-5 Java 2 Micro Edition简介 9
1-5-1 使用配置对不同设备进行抽象 10
1-5-2 使用框架对API进行定义 10
1-5-3 J2ME系统体系结构 10
1-5-4 J2ME已有的配置和框架 11
1-5-5 J2ME的技术特性 11
1-6 CDC、CLDC和MIDP简介 12
1-6-1 CDC和CLDC简介 12
1-6-2 典型框架简介 13
1-7 J2ME的一些参考网站 13
1-7-1 主要J2ME的Web站点 13
1-7-2 主要的J2ME讨论区 14
1-8 总结 14
第2章 J2ME开发环境 17
2-1 CLDC和MIDP安装和配置步骤 18
2-1-1 安装软件 18
2-1-2 开发环境的配置 19
2-2 第一个例子——HelloWorld.java 24
2-2-1 HelloWorld.java的源代码 24
2-2-2 编译、预校验和运行 25
2-2-3 快速开发的技巧 26
2-2-4 开发MIDlet的完整流程 27
2-3 在网络上发布MIDlet程序 27
2-4 使用J2ME Wireless Toolkit 30
2-4-1 J2ME Wireless Toolkit的硬件和软件要求 30
2-4-2 J2ME Wireless Toolkit的安装步骤 30
2-4-3 在J2ME Wireless Toolkit中运行例子程序 32
2-4-4 在J2ME Wireless Toolkit中创建自己的程序 34
2-4-5 J2MEWTK中的模拟设备简介 35
2-4-6 在J2MEWTK中进行MIDlet的打包 36
2-5 总结 37
第3章 Java语言入门 39
3-1 Java概述 40
3-1-1 Java语言的特点 40
3-1-2 Java虚拟机(JVM)简介 41
3-1-3 一个简单的Java程序 42
3-1-4 Java中标准类库介绍 43
3-2 数据类型 43
3-2-1 常量与变量 43
3-2-2 整型数据 44
3-2-3 浮点型(实型)数据 44
3-2-4 字符型数据 45
3-2-5 布尔型数据 46
3-3 运算符和表达式 46
3-3-1 算术运算符 46
3-3-2 关系运算符 47
3-3-3 布尔逻辑运算符 47
3-3-4 位运算符 48
3-3-5 赋值运算符 48
3-3-6 条件运算符 49
3-3-7 表达式 49
3-4 流程控制 50
3-4-1 分支语句 50
3-4-2 循环语句 51
3-4-3 特殊循环流程控制 52
3-4-4 注释语句 52
3-5 数组 52
3-5-1 一维数组 52
3-5-2 多维数组 53
3-6 类、对象、包和接口 54
3-6-1 类 54
3-6-2 对象 56
3-6-3 父类、子类和继承 57
3-6-4 包 60
3-6-5 访问权限 61
3-6-6 接口 62
3-7 线程 63
3-7-1 线程 63
3-7-2 线程体的构造 65
3-8 Java网络程序设计 67
3-8-1 网络资源的使用 67
3-8-2 Socket编程 68
3-8-3 数据报编程 69
3-9 总结 70
第4章 CLDC和MIDP API简介 71
4-1 全新的CLDC/MIDP开发环境 72
4-1-1 MIDlet简介 72
4-1-2 应用程序可移植性 72
4-1-3 股票跟踪程序——MIDP的功能 72
4-2 CLDC API简介 73
4-2-1 java.lang 73
4-2-2 java.io 74
4-2-3 java.util 75
4-2-4 javax.microedition.io 76
4-3 MIDP中增加的功能 77
4-3-1 计时器——Timer 77
4-3-2 MIDP在网络通信上的增强 77
4-3-3 数据库功能 78
4-4 MIDP API简介 78
4-4-1 java.util 78
4-4-2 javax.microedition.rms 79
4-4-3 javax.microedition.midlet 79
4-4-4 javax.microedition.io 80
4-4-5 javax.microedition.lcdui 80
4-5 HelloMidlet的详细解释 81
4-5-1 总体运行功能 82
4-5-2 各部分代码功能 84
4-6 总结 85
第二部分 J2ME程序设计 89
第5章 J2ME的用户界面编程 89
5-1 J2ME界面编程概述 90
5-1-1 Display类和屏幕显示部件 90
5-1-2 典型的屏幕显示部件 91
5-1-3 界面设计部件的层次关系 97
5-2 如何使用Display类 97
5-2-1 获得MIDlet的Display类 97
5-2-2 显示Displayable部件 97
5-3 使用Screen类和滚动条 98
5-3-1 Screen类的基本属性 98
5-3-2 在Screen中使用滚动条 98
5-4 使用命令按钮响应用户操作 99
5-4-1 创建命令按钮 100
5-4-2 设置命令按钮的响应函数 101
5-4-3 使用命令按钮的例子 101
5-5 使用文本框输入信息 102
5-5-1 创建一个文本框 103
5-5-2 文本框的演示例子 104
5-6 使用报警显示提示信息 107
5-6-1 两类报警——timed和modal 107
5-6-2 如何使用报警 107
5-6-3 演示报警使用的例子 108
5-7 向用户提供选择——列表 109
5-7-1 生成一个列表 109
5-7-2 响应用户对列表的操作 110
5-7-3 使用列表的完整例子 111
5-8 显示或改变值的大小——标尺 114
5-8-1 标尺的两种类型——交互标尺和非交互标尺 115
5-8-2 交互式标尺 115
5-8-3 非交互式标尺 116
5-9 有效地校验用户输入 118
5-9-1 监测部件状态的变化——ItemStateListener接口 118
5-9-2 对用户输入的字符进行校验 119
5-9-3 输入电话号码的例子 123
5-10 处理日期和时间 125
5-10-1 使用DateField 125
5-10-2 设置正确的日期和时间 126
5-10-3 clearDate()和combineDateTime() 126
5-10-4 使用日期和时间的完整例子 127
5-11 定时执行任务 131
5-11-1 定时器——Timer 132
5-11-2 调度任务的方法 132
5-11-3 星空模拟程序 133
5-12 综合例子——股票价格跟踪程序 135
5-13 总结 138
第6章 J2ME数据库编程 139
6-1 RMS的表——Record Store 140
6-1-1 操作Record Store的方法 140
6-1-2 Record Store的维护信息——Header 143
6-1-3 获得Record Store的其他信息 144
6-1-4 Record Store的限制 144
6-2 在Record Store中操作记录 144
6-2-1 添加记录 145
6-2-2 删除记录 146
6-2-3 修改一条记录 147
6-2-4 监视记录的改变 151
6-2-5 Record Store中记录号的重用问题 154
6-2-6 使用RecordEnumeration遍历记录 155
6-3 创建多列表格 158
6-3-1 编码和解码的方法 159
6-3-2 多列表格的保存 159
6-3-3 检索多列表格 162
6-4 使用RecordComparator对记录进行排序 163
6-4-1 实现RecordComparator接口 163
6-4-2 数据库排序的例子 164
6-5 使用RecordFilter查找记录 167
6-5-1 实现RecordFilter接口 167
6-5-2 查找记录的例子 168
6-6 高效使用RMS的方法 172
6-6-1 减少写记录次数 172
6-6-2 减少读记录次数 173
6-6-3 防止出现“抖动” 174
6-6-4 重用数组 174
6-6-5 高效率使用RMS的例子 175
6-7 总结 180
第7章 J2ME的网络编程 181
7-1 J2ME的网络连接框架 182
7-1-1 J2ME的网络连接层次 182
7-1-2 J2ME中支持的通信协议 183
7-1-3 一个简单的例子 184
7-2 使用HTTP协议通信概述 188
7-2-1 HttpConnection类 188
7-2-2 HTTP通信例子 190
7-3 使用HTTP协议发送和接收数据 194
7-3-1 HTTP协议通信模型 194
7-3-2 发送数据的方法 195
7-3-3 接收数据的方法 197
7-3-4 服务器端的程序 198
7-3-5 使用HTTP协议发送和接收数据的例子 200
7-4 网络通信中的数据加密 205
7-4-1 MIDlet的安全性 205
7-4-2 使用加密类库 206
7-4-3 一个加密类——Encryptor 206
7-4-4 Encryptor的使用 208
7-4-5 数据加密的完整例子 209
7-5 网络通信中常用实例 213
7-5-1 获得指定URL的内容 213
7-5-2 从Web服务器上取回一个页面 215
7-5-3 从移动电话上访问Servlet并获得结果 216
7-5-4 与Web服务器建立socket连接 218
7-5-5 从Yahoo获得股票信息 219
7-6 总结 224
第8章 J2ME应用程序的性能优化 225
8-1 代码优化的一些基准 226
8-1-1 内存测试基准 226
8-1-2 时间测试基准 227
8-2 优化内存使用 227
8-2-1 创建和删除对象 227
8-2-2 字符串和字符串缓存 228
8-2-3 正确处理内存不足 229
8-3 优化代码运行速度 229
8-3-1 优化循环 229
8-3-2 使用数组代替对象 229
8-3-3 使用缓存I/O 230
8-3-4 主动清理内存 230
8-4 用户界面的优化 231
8-4-1 显示程序运行的进度 231
8-4-2 开发易于使用的程序 232
8-5 合理地打包应用程序 232
8-5-1 仅仅打包使用的代码 232
8-5-2 使用代码加密保护程序 232
8-6 总结 233
第三部分 J2ME高级编程 237
第9章 kAWT编程 237
9-1 在J2ME中使用kAWT 238
9-1-1 在J2ME Wireless Toolkit中使用kAWT 238
9-1-2 命令行方式使用kAWT 239
9-1-3 KawtHello的分析 240
9-1-4 定制编译kAWT类库 241
9-2 kAWT API简介 242
9-3 kAWT编程例子 242
9-3-1 KawtDemo——展示kAWT界面设计的威力 242
9-4 总结 248
第10章 J2ME的低级用户界面设计 251
10-1 低级用户界面设计概述 252
10-1-1 屏幕显示的基础——Canvas类 252
10-1-2 使用Canvas类的“Hello,World!”例子 253
10-1-3 程序退出的方法 253
10-2 HappyPush——一个详细的例子 255
10-2-1 绘画出屏幕背景 255
10-2-2 响应用户操作 256
10-2-3 响应指针输入 257
10-2-4 使用Image类画出图像 257
10-2-5 响应重复按键或指针移动事件 258
10-3 编写MIDlet的启动画面 263
10-3-1 使用报警的方法 263
10-3-2 使用Canvas类绘制启动画面 265
10-4 编写一个屏幕保护程序 267
10-4-1 如何实现ScreenSaver 267
10-4-2 ScreenSaver的代码 268
10-5 清除屏幕显示内容 272
10-5-1 清除屏幕的实现原理 272
10-5-2 清屏程序的例子 272
10-6 图片处理的例子 275
10-6-1 显示网络上下载的Png图片 275
10-6-2 如何实现滚动显示图像 279
10-7 总结 286
第11章 J2ME游戏程序设计 287
11-1 在移动电话上开发游戏需要讨论的问题 288
11-1-1 在移动电话上开发游戏的限制 288
11-1-2 开发游戏有利的方面 289
11-2 游戏编程基本技术 289
11-2-1 MIDlet的基本结构 289
11-2-2 使用Canvas对象绘制图形 290
11-3 响应游戏中用户的按键 290
11-3-1 按键事件 290
11-3-2 游戏按键 291
11-3-3 响应键盘事件 291
11-3-4 使用通用按键 293
11-4 使用重复按键简化用户输入 294
11-4-1 判断系统是否支持重复按键 294
11-4-2 模拟重复按键 295
11-4-3 演示重复按键的例子 296
11-4-4 实现连续移动 304
11-4-5 实现加速移动 305
11-4-6 演示连续移动和加速移动的例子 307
11-5 在程序中实现屏幕滚动 317
11-5-1 定时器 317
11-5-2 用定时器实现重复按键 317
11-5-3 使用定时器实现屏幕滚动 318
11-6 实现镜头的移动 322
11-6-1 屏幕滚动和镜头移动 322
11-6-2 镜头移动的实现 323
11-7 在游戏程序中绘制精灵 326
11-7-1 在支持透明图形的系统上实现绘制精灵 326
11-7-2 在不支持透明图形的系统中实现绘制精灵 328
11-8 井字棋的例子 331
11-8-1 井字棋介绍 331
11-8-2 源代码 331
11-9 网络游戏编程 337
11-9-1 网络游戏介绍 337
11-9-2 数据通信的方法 337
11-9-3 简单的网络游戏——NumberPick 338
11-9-4 服务器端的代码 342
11-10 总结 345
第四部分 J2ME应用实例 349
第12章 股票购买售出的例子 349
12-1 Controller接口 350
12-1-1 Controller的功能 350
12-1-2 显示屏幕的管理 350
12-2 开始屏幕——WelcomeScreen 351
12-2-1 显示欢迎信息 352
12-2-2 处理用户输入 352
12-3 购买股票——BuyStockScreen 353
12-3-1 屏幕显示 353
12-3-2 处理用户输入 354
12-4 持有股票——SelectStockScreen 355
12-4-1 显示持有股票 356
12-4-2 处理用户选择的股票 357
12-5 卖出股票——SellStockScreen 357
12-5-1 显示待卖出的股票 357
12-5-2 股票对象——Stock 358
12-6 股票数据库——RMSStockStore 359
12-6-1 查找一个股票 361
12-6-2 买入股票处理 363
12-6-3 返回用户持有的股票 364
12-6-4 Stock对象的存储格式 365
12-7 总结 366
第13章 在线投票的例子 367
13-1 网络编程的回顾 368
13-1-1 HTTP协议通信方法 368
13-1-2 建立HTTP通信连接 369
13-2 VoterMidlet总体框架 369
13-3 进行投票——VoteResults 370
13-3-1 总体结构 370
13-3-2 响应用户输入 370
13-3-3 当前投票结果 371
13-4 与服务器通信——ResourceUtility 371
13-4-1 从服务器接收投票结果的总体方法 371
13-4-2 接收投票数据的详细过程 373
13-4-3 分析获得的投票信息 374
13-4-4 发送用户投票结果到服务器 375
13-5 XML分析工具——XMLUtil 375
13-5-1 XML到VoteSummary类的转变 375
13-5-2 分析XML中的一个节 376
13-6 总结 377