第1章 无线设备与J2ME 1
1.1 无线通信(Wireless Communication)浪潮 1
1.2 J2ME与Java 1
1.2.1 J2ME的发展 1
1.2.2 CLDC 2
1.2.3 MIDP 4
1.2.4 KVM 6
1.2.5 J2ME/J2SE/J2EE的关系 6
1.2.6 为什么选择J2ME 7
1.3 小结 7
第2章 J2ME编程初体验 8
2.1 下载相关软件 8
2.1.1 下载JSDK 8
2.1.3 下载MIDP 10
2.1.2 下载CLDC 10
2.1.4 下载Wireless Toolkit 11
2.2 安装配置SDK 11
2.3 安装CLDC 13
2.4 安装MIDP 14
2.5 安装J2ME Wireless Toolkit 15
2.6 编写第一个J2ME程序 17
2.6.1 编写一个简单的演示程序——HelloWorld.iava 17
案例2-1:MIDlet演示 17
2.6.2 利用javac编译 18
2.6.3 用preverify验证类文件 19
2.6.4 运行HelloWorld 19
2.6.5 MIDlet的基本架构 20
2.7 小结 20
第3章 CLDC库 21
3.1 CLDC概述 21
3.2 K虚拟机(KVM) 22
3.3 KVM中的类文件验证机制 23
3.4 CLDC虚拟机所支持的类文件格式 24
3.5 CLDC库与J2SE库 24
3.5.1 系统类 24
3.5.2 数据类型类 25
3.5.3 集合类 26
3.5.4 输入/输出类 26
3.5.5 日期和时间类 27
3.5.6 异常类和错误类 27
3.5.7 网络类 29
案例3-1:Socket通信服务端程序 32
案例3-2:Socket通信客户端程序 34
3.5.8 附加的工具类 35
3.6 小结 36
4.1 什么是MIDlet 37
第4章 进一步认识MIDlet 37
4.2 MIDlet生命周期 38
4.3 MIDlet中的方法 39
4.4 MIDlet套件(suite) 40
案例4-1:一个简单的清单文件 41
4.5 Java应用管理器 42
4.6 取得应用描述文件中的MIDlet属性 42
案例4-2:取得清单文件和应用描述文件中的属性 43
4.7 将多个MIDlet打包到MIDlet套件中 45
案例4-3:一个用于MIDlet套件演示的MIDlet 45
4.8 小结 47
第5章 用户界面设计 48
5.1 MIDP用户界面API的架构 48
5.2 高级用户界面 49
5.3 低级用户界面 50
5.5 lcdui包 51
5.4 事件处理简介 51
5.6 高级用户界面API编程 53
5.6.1 Screen类 53
案例5-1:Screen的简单演示 53
5.6.2 Alert类 55
案例5-2:Alert演示 56
5.6.3 TextBox类 59
案例5-3:TextBox演示 59
5.6.4 List类 61
案例5-4:互斥型列表(Exclusive List)的使用 63
案例5-5:多选型列表(Multiple List)的使用 66
5.6.5 Ticker类 68
案例5-6:Ticker组件的使用 68
5.6.6 Form类 70
案例5-7:ChoiceGroup的使用(互斥型) 71
案例5-8:ChoiceGroup的使用(多选型) 73
案例5-9:DateField的使用 75
案例5-10:TIME模式的DateField 76
案例5-11:DATE_TIME模式的DateField 77
案例5-12:Gauge的使用 80
案例5-13:Image的使用 82
案例5-14:ImageItem的使用 85
案例5-15:StringItem的使用 88
案例5-16:用于登录的TextField 89
5.7 低级用户界面API编程 91
案例5-17:在屏幕上画字符串 91
案例5-18:在MIDlet中设置字体 93
5.7.1 在屏幕上画线 96
案例5-19:在屏幕上画线 96
5.7.2 绘制和填充(圆角)矩形 97
案例5-20:绘制矩形 98
案例5-21:利用弧来表示不同的市场占有率 100
5.7.3 绘制和填充弧 100
5.8 小结 102
5.7.4 图像 102
第6章 事件处理 103
6.1 事件处理基础 103
6.2 高级事件处理 104
6.2.1 Command 104
案例6-1:Command的使用 106
6.2.2 通过软按键(Soft Button)使用Command 108
案例6-2:通过软按键使用Command 108
6.2.3 通过菜单(menu)使用Command 109
6.2.4 建立一个ItemStateListener 112
案例6-3:使用ItemStateListener处理事件 113
6.2.5 处理ChoiceGroup状态改变事件 115
案例6-4:处理ChoiceGroup的状态改变事件 115
案例6-5:处理DateField/TextField的状态改变事件 117
6.2.6 处理DateField/TextField状态改变事件 117
6.2.7 处理Gauge状态改变事件 121
6.3 低级事件处理 121
6.3.1 按键事件 122
案例6-6:按键事件的处理 122
6.3.2 指针(Pointer)事件 125
案例6-7:处理指针(Pointer)事件 126
6.3.3 Canvas显示事件 129
6.4 小结 130
第7章 利用移动设备访问网络 131
7.1 无线网络的特点 131
7.2 通用连接框架(GCF)在MIDP中的实现 131
7.3 HTTP通信 132
7.3.1 HTTP通信模式 132
案例7-1:在MIDlet中使用HTTP连接 133
7.3.2 HTTP连接 133
7.3.3 HttpConnection接口 139
7.3.4 MIDlet与Servlet的通信 142
案例7-2:利用浏览器来访问Servlet 142
案例7-3:利用MIDlet来调用Servlet 145
7.3.5 MIDlet和JSP的通信 154
案例7-4:掌握MIDlet与JSP的通信 154
7.3.6 在MIDlet中使用Session(会话) 158
案例7-5:在MIDlet中使用Session 160
7.4 访问JSP/Servlet时中文问题的解决方法 166
案例7-6:解决JSP/Servlet中的中文乱码问题 169
7.5 小结 179
第8章 在移动设备中保存数据 180
8.1 记录管理系统RMS 180
8.2 记录存储的操作 181
案例8-1:新建记录存储 183
8.3 使用记录 185
8.3.1 向记录存储中加入记录 185
案例8-2:向记录存储增加记录 186
8.3.2 从记录存储中取出记录 188
案例8-3:从记录存储中获得数据 188
8.3.3 从记录存储中删除记录 190
案例8-4:从记录存储中删除记录 190
8.3.4 修改记录存储内的记录 191
案例8-5:修改记录存储内的数据 191
8.3.5 监听记录存储内记录的变化 193
案例8-6:处理记录存储中的记录改变事件 193
8.4 记录的过滤和排序 198
8.4.1 用RecordEnumeration从记录存储中读取记录 198
案例8-7:利用枚举器来读取记录存储中的数据 200
案例8-8:定义一个过滤器 203
8.4.2 用RecordFilter过滤记录 203
8.4.3 对记录进行排序 206
案例8-9:自定义Comparator对记录进行排序 206
8.5 RMS高级应用 210
案例8-10:记录存储中读写不同数据类型的数据 211
8.6 综合案例——手机电话簿 216
8.6.1 “联系人”类 216
8.6.2 “记录存储”类 217
8.6.3 电话簿菜单 225
8.6.4 新增联系人 228
8.6.5 列出所有联系人 230
8.6.6 列出联系人详细信息 232
8.6.7 维护联系人信息 234
8.6.8 删除联系人信息 235
8.6.9 查询 237
8.7 小结 239
9.1 Java应用管理器 240
第9章 让移动用户使用MIDP应用程序 240
9.2 配置Web服务器(以Tomcat为例) 241
9.3 将MIDlet套件下载到MIDP模拟器 241
9.3.1 -install 242
9.3.2 -list 243
9.3.3 -run 243
9.3.4 -remove 244
9.3.5 -transient 244
9.3.6 -autotest 245
9.3.7 -storageNames 245
9.3.8 MIDP模拟器中对MIDlet套件的管理 245
9.4 使用Wireless Toolkit的JAM功能 247
9.5 小结 248
第10章 项目案例 249
10.1 项目案例1——用lcdui编写TicTacToe游戏 249
10.2.1 数据库设计 263
10.2 项目案例2——运动会查询系统 263
10.2.2 Servlet和MIDlet程序 264
10.3 小结 291
第11章 将MIDlet程序移植到Palm上 292
11.1 Palm与POSE 292
11.2 安装MIDP4Palm 293
11.2.1 安装MIDP4Palm到Palm 293
11.2.2 将MIDP4Palm安装到POSE上 295
11.2.3 参数设置 296
11.3 将J2ME应用转换成Palm应用 299
11.3.1 用图形工具进行转换 300
11.3.2 用命令行进行转换 301
11.4 在Palm上安装运行J2ME程序 304
11.5 小结 305
12.1.1 Wireless Toolkit目录结构 306
12.1 Wireless Toolkit的使用 306
第12章 使用Wireless Toolkit和JBuilder来开发MIDlet 306
12.1.2 Wireless Toolkit自带的模拟器 307
12.1.3 模拟器的参数设置和功能设置 310
12.1.4 使用Wireless Toolkit开发J2ME程序 313
案例12-1:使用Wireless Toolkit来开发J2ME程序 313
12.1.5 在命令行中使用Wireless Toolkit 317
案例12-2:在命令行中使用Wireless Toolkit 317
12.2 JBuilder MobileSet的使用 321
12.2.1 安装JBuilder MobileSet 322
12.2.2 配置JBuilder 323
12.2.3 新建MIDP项目 325
12.2.4 开发图形用户界面 327
案例12-3:利用JBuilder MobileSet开发MIDlet图形用户界面程序 327
12.2.5 开发MIDlet 329
案例12-4:利用JBuilder MobileSet开发MIDlet 329
12.2.6 调试、编译和运行MIDlet 332
12.2.7 将J2ME应用打包 333
12.3 Wireless Toolkit与JBuilder MobileSet的比较 340
12.4 小结 340
第13章 更强劲的界面库——kAWT 341
13.1 kAWT与AWT 341
13.2 下载并安装kAWT 341
13.3 KAWTlet 342
案例13-1:使用kAWT的Frame来建立图形用户界面 343
13.4 事件处理 345
案例13-2:kAWT中的事件处理 345
13.5 de.kawt中常用类介绍 350
13.5.1 OptionDialog类 351
案例13-3:OptionDialog的使用 351
13.5.2 ProgressBar类 354
案例13-4:ProgressBar的使用 354
13.5.3 TabbedPane类 355
案例13-5:TabbedPane的使用 357
13.6 小结 359
附录A Tomcat架设 360
A.1 从网上下载Tomcat 360
A.2 安装Tomcat 360
A.3 配置虚拟目录 362
A.3.1 设置管理账号 362
A.3.2 应用的目录结构 364
A.3.3 建立应用程序 364
A.3.4 启动应用程序 365
A.3.5 停止应用程序 365
A.3.6 重新装载应用程序 365
A.3.7 删除应用程序 365
A.3.8 通过server.xml来建立应用程序 365
附录B 支持Java的无线设备列表 367