本书由浅入深、循序渐进地介绍了用J2ME进行手机应用开发中各关键技术的实现方法和技巧。在叙述过程中以一般开发人员开发的顺序为主线,逐一介绍每一项内容的具体实现方法,包括开发环境、界面设计、多媒体技术、游戏开发、3D图形开发、短消息、网络开发、文件系统开发及通信接口的开发等内容,同时给出了每一个关键技术相应的实例程序,以帮助读者能将所学知识更快地应用到实际应用中。
本书适合希望学习Java手机编程的初学者,也可作为手机程序开发人员的参考用书。
目
录
第1章 Java语言 1
1.1 Java基本语法 2
1.1.1 变量、常量和数据类型 2
1.1.2 Java程序的注释 10
1.1.3 表达式和运算符 12
1.1.4 字符串运算 14
1.1.5 数组 16
1.2 条件语句 18
1.3 分支语句 19
1.4 循环语句 20
1.4.1 for循环 20
1.4.2 while循环 21
1.4.3 do-while循环 21
1.4.4. 跳转语句 22
1.5 面向对象编程技术 22
1.5.1 对象和类概述 23
1.5.2 对象的成员 24
1.5.3 访问修饰符 26
1.5.4 成员的重载和覆盖 27
1.5.5 包和接口 28
1.5.6 this、super和null变量 31
1.6 异常处理机制 32
1.6.1 异常概述 33
1.6.2 异常的捕获和抛出 33
1.6.3 自定义异常 34
1.7 小结 35
第2章 J2ME概述 36
2.1 J2ME中的常用概念 37
2.1.1 J2ME嵌入式开发概述 37
2.1.2 J2ME和J2SE的关系 37
2.1.3 KVM,CVM和JVM 38
2.1.4 CLDC配置 38
2.1.5 MIDP简表 39
2.2 MIDlet定义 39
2.2.1 MIDlet定义 39
2.2.2 MIDlet的生命周期 40
2.3 Motorola的J2ME手机开发包 40
2.3.1 Motorola的J2ME手机开发包的下载和安装 41
2.3.2 Motorola的J2ME手机开发包的目录结构 43
2.3.3 Motorola的J2ME手机开发包的模拟器 44
2.4 创建一个简单MIDlet 47
2.4.1 创建一个简单的MIDlet 47
2.4.2 Manifest文件编写 47
2.4.3 JAD文件编写 48
2.4.4 测试和运行MIDlet程序 49
2.5 技巧集锦 51
2.5.1 浮点运算错误 51
2.5.2 如何检查Motorola手机支持的API的 51
2.6 小结 52
第3章 NetBeans开发环境 53
3.1 下载和安装NetBeans 54
3.1.1 下载NetBeans开发工具 54
3.1.2 安装NetBeans集成开发环境 59
3.1.3 安装NetBeans Mobility 61
3.2 NetBeans开发环境 61
3.2.1 更新NetBeans系统 62
3.2.2 NetBeans菜单 64
3.2.3 NetBeans工具栏 65
3.2.4 代码编辑区 66
3.2.5 项目窗口 70
3.2.6 运行环境窗口 70
3.2.7 文件窗口 71
3.2.8 输出窗口 72
3.3 创建一个J2ME程序 72
3.3.1 WTK手机无线开发包 72
3.3.2 创建一个J2ME程序 73
3.4 MIDlet的调试技术 77
3.4.1 调试模式和断点设置 77
3.4.2 观测变量值 77
3.4.3 控制代码执行 79
3.5 在手机中运行程序 79
3.5.1 通过OTA下载到手机运行 79
3.5.2 通过数据线下载到手机运行 80
3.6 技巧集锦 81
3.6.1 MIDlet的安装步骤 81
3.6.2 Motorola T720内存使用 81
3.6.3 如何在NetBeans中添加Motorola M.3模拟器 82
3.7 小结 85
第4章 多线程技术 86
4.1 线程概述 87
4.1.1 线程的概念 87
4.1.2 线程生命周期 87
4.2 通过Runnable接口创建线程 88
4.2.1 实现Runnable接口 88
4.2.2 线程的运行和停止控制 90
4.3 Thread类 91
4.3.1 Thread类重要的属性和方法 91
4.3.2 通过Thread类实现线程 92
4.4 线程的同步 93
4.4.1 线程不同步的影响 93
4.4.2 线程同步方法 97
4.4.3 线程同步实例 98
4.5 线程的优先级 102
4.5.1 线程优先级概述 102
4.5.2 线程优先级实例 102
4.6 线程的等待和唤醒 108
4.6.1 等待和唤醒的方法 108
4.6.2 等待和唤醒实例 109
4.7 技巧集锦 113
4.7.1 如何防止线程死锁 113
4.7.2 如何进行通信 113
4.8 本章小结 114
第5章 设计简单的人机交互界面 116
5.1 用户界面设计概述 117
5.2 Display和Displayable类 118
5.2.1 Display类的使用方法 118
5.2.2 Display类应用实例 120
5.2.3 Displayable类 125
5..2.4 Displayable类应用实例 127
5.3 在窗口中显示滚动条 129
5.3.1 Ticker类 130
5.3.2 滚动条应用举例 130
5.4 TextBox类 133
5.4.1 TextBox的构造函数 133
5.4.2 文本处理 134
5.4.3 TextBox的输入约束 136
5.4.4 TextBox的最大值 143
5.5 命令按钮 143
5.5.1 Command类 144
5.5.2 CommandListener类 145
5.5.3 Command类应用举例 146
5.6 Alert和AlertType类 149
5.6.1 Alert类 150
5.6.2 AlertType类 150
5.6.3 Alert应用举例 151
5.7 技巧集锦 157
5.8 小节 159
第6章 列表风格界面设计 160
6.1 Item类 161
6.1.1 Item的派生类 161
6.1.2 Item的布局 162
6.1.3 Item的外观 163
6.1.4 Item的其他属性 164
6.2 与列表风格相关的接口 164
6.2.1 ItemCommandListener接口 165
6.2.2 ItemStateListener接口 165
6.2.3 Choice接口 166
6.3 List类 168
6.3.1 重要属性和方法 168
6.3.2 应用举例 171
6.4 Form类 177
6.4.1 重要属性和方法 177
6.4.2 应用举例 179
6.5 TextField类 183
6.5.1 重要属性和方法 183
6.5.2 应用举例 185
6.6 ChoiceGroup类 188
6.6.1 重要属性和方法 188
6.6.2 应用举例 191
6.7 技巧集锦 195
6.7.1 如何删除List中的内容 195
6.7.2 执行时间的测量 196
6.8 小节 196
第7章 高级用户界面 198
7.1 使用Gauge 199
7.1.1 重要属性和方法 199
7.1.2 应用举例 202
7.2 使用ImageItem 209
7.2.1 重要属性和方法 209
7.2.2 应用举例 210
7.3 使用StringItem 212
7.3.1 重要属性和方法 212
7.3.2 应用举例 213
7.4 使用DateField 216
7.4.1 TimeZone类 216
7.4.2 Date类 216
7.4.3 Calendar类 217
7.4.4 DateField重要属性和方法 218
7.4.5 应用举例 221
7.5 技巧集锦 228
7.5.1 如何实现版权闪现窗口 228
7.5.2 Alert对话框中使用进度条 230
7.6 小结 234
第8章 图形和动画界面开发 235
8.1 Canvas画布屏幕 236
8.1.1 画布使用基本框架 236
8.1.2 键盘事件处理 236
8.1.3 画布大小 239
8.1.4 指针事件处理 239
8.1.5 全屏模式 239
8.1.6 应用举例 240
8.2 绘制基本图形和文本 243
8.2.1 Graphics类 243
8.2.2 文本绘制方法 244
8.2.3 基本的绘制和填充函数 245
8.3 图像显示和处理 246
8.4 简单动画的实现 248
8.4.1 通过线程实现动画 249
8.4.2 定时器和实现动画 250
8.4.3 通过callSerially()方法实现动画 251
8.4.4 应用举例 251
8.5 技巧集锦 257
8.5.1 双缓冲技术 257
8.5.2 Motorola手机键值的变化 258
8.6 小节 259
第9章 多媒体技术开发 260
9.1 声音和音乐播放 261
9.1.1 J2ME对声音和音乐的支持 261
9.1.2 声调播放实例 264
9.1.3 不同格式音乐的播放实例 266
9.2 视频播放 270
9.2.1 播放视频方法 270
9.2.2 视频播放器开发实例 271
9.3 技巧集锦 273
9.3.1 同时播放两个Wave文件时的异常 273
9.3.2 Motorola V600支持的媒体格式 274
9.4 小节 274
第10章 动画及游戏开发 276
10.1 游戏画布GameCanvas 277
10.1.1 重要属性和方法 277
10.1.2 处理游戏循环 278
10.1.3 GameCanvas引用实例 279
10.2 游戏精灵Sprite 285
10.2.1 动画帧控制 285
10.2.2 游戏精灵碰撞检测 287
10.2.3 精灵的移动和转动 287
10.2.4 精灵应用实例 288
10.3 游戏图层 293
10.3.1 游戏图层 293
10.3.2 动画实现 294
10.4 图层管理 295
10.4.1 层的安排 295
10.4.2 地图滚动控制 295
10.5 技巧集锦 296
10.5.1 如何减小程序的大小 296
10.5.2 如何提高游戏的执行效率 296
10.6 小节 297
第11章 3D图形程序开发 298
11.1 3D程序框架 299
11.2 通过顶点坐标生成简单的3D物体 300
11.2.1 生成3D物体 300
11.2.2 旋转3D物体 303
11.2.3 简单3D物体生成实例 304
11.3 导入3D图形文件 308
11.3.1 Loader类 308
11.3.2 导入3D图形文件实例 309
11.4 3D显示特效雾化效果实现 311
11.4.1 Fog类 312
11.4.2 雾化效果实例 313
11.5 小节 318
第12章 Messaging应用开发 319
12.1 设置WTK中的WMA参数 320
12.2 使用WMA控制台发送消息 321
12.2.1 发送文本消息 323
12.2.2 发送二进制消息 324
12.2.3 发送小区广播 325
12.2.4 发送MMS消息 326
12.3 发送和接收文本消息 328
12.3.1 SMS系统概述 329
12.3.2 发送消息 329
12.3.3 接收消息 331
12.3.4 发送和接收文本消息实例 332
12.4 发送和接收二进制消息 338
12.4.1 二进制消息发送和接收 338
12.4.2 发送和接收二进制消息实例 339
12.5 发送和接收多媒体消息 347
12.5.1 MultipartMessage 348
12.5.2 MessagePart 351
12.6 技巧集锦 353
12.6.1 小区广播的接收和发送 353
12.6.2 在线程中接收短信 355
12.6.3 如何在Motorola SDK中模拟短信的发送 356
12.7 小节 359
第13章 基于HTTP协议的网络开发 360
13.1 网络开发基础知识 361
13.2 Connector接口 361
13.3 连接Web服务器 362
13.3.1 HttpConnection和HttpsConnection 362
13.3.2 连接Web服务器的方法 364
13.4 从服务器Get数据 366
13.5 向服务器Post数据 370
13.6 技巧集锦 380
13.6.1 如何设置Motorola手机 380
13.6.2 如何在WTK中使用代理 380
13.6.3 如何使用WTK的网络监视器 381
13.7 小节 382
第14章 Socket编程 383
14.1 Socket编程概述 384
14.2 SocketConnection 384
14.3 ServerSocketConnection 386
14.4 Socket客户端开发 387
14.5 Socket服务器端程序开发 394
14.6 技巧集锦 397
14.6.1 Motorola Accompli 008/A6288的网络支持 397
14.6.2 Socket客户端超时设置 397
14.6.3 Motorola的哪些手机支持ServerSocketConnection 398
14.7 小节 398
第15章 串口通信开发 399
15.1 串口通讯的基本概念 400
15.1.1 RS-232物理特性 400
15.1.2 口通信的基本概念 401
15.2 获取可以利用的串口 402
15.3 进行标准串口连接 405
15.3.1 程序连接方法 406
15.3.2 连接测试方法 407
15.4 发送和接收数据 411
15.5 标准串口开发实例 412
15.6 技巧集锦 423
15.6.1 如何获得最大传输速率 423
17.5.2 摩托罗拉T720, T721, T720i支持串口API吗? 423
15.7 小节 424
第16章 红外数据传输 425
16.1 红外概述 426
16.2 通过逻辑串口进行红外通讯 426
16.3 通过IrOBEX进行通讯 428
16.3.1 IrOBEX协议概述 429
16.3.2 IrOBEX协议客户端开发 430
16.3.3 IrOBEX协议服务器端开发 431
16.4 红外OBEX开发实例 433
16.5 技巧集锦 442
16.5.1 通过红外安装MIDlet 442
16.5.2 如何设置WTK的红外OBEX参数 444
16.6 小节 445
第17章 文件系统开发 426
17.1 输入输出流控制 427
17.1.1 输入输出流的分类 427
17.1.2 输入流重要属性和方法 428
17.1.3 输出流重要属性和方法 428
17.2 文件系统操作API 429
17.2.1 FileConnection接口 429
17.2.2 其他API 430
17.3 文件浏览器开发实例 431
17.3.1 MIDlet类 431
17.3.2 确认对话框ConfirmDialog 431
17.3.3 FileExplorer类和成员变量定义 433
17.3.4 文件和文件夹的访问 436
17.3.5 创建文件 439
17.3.6 删除文件 442
17.3.7 读取文件数据 444
17.3.8 访问文件的属性 447
17.3.9 文件的复制 450
17.3.10 文件的剪切 452
17.3.11 文件的粘贴 452
17.4 技巧集锦 454
17.4.1 签名运行 454
17.4.2 MIDlet JAD文件属性 456
17.5 小节 458
序 一
我和作者是在SUN公司的一次NetBeans技术大会上认识的。后来由于工作上的关系,我们经常在一起讨论问题,在接触中我发现作者不仅是一位有着丰富经验的软件工程师,还是一位“多产”的技术作家。我很钦佩作者这种不遗余力地在国内推广Java技术和分享开发经验的行动,并很高兴他的作品能够成为“SUN中国技术社区”的推荐用书。
总地来说,这是一本非常不错的用于学习J2ME开发的书籍,其内容翔实、覆盖领域全面,并且有大量实例可供读者学习。从整体上说,本书具有以下特色:
首先,作者具有多年的软件开发经验以及丰富的J2ME开发经验,因此能够结合实际应用中的具体情况进行介绍,理论和实践结合得相当紧密。
其次,值得称道的是,本书在介绍大量专业的手机开发知识的同时,对最新的开发工具也进行了详细的介绍。本书中所有的示范代码都是使用NetBeans 4.1中文版开发的。作为一款开放源代码的开发工具,NetBeans在开发人员中一向有极好的口碑,在J2ME开发领域更是不可多得的顶级利器。但是,目前国内关于NetBeans的专业书籍为数甚少,而本书中详细介绍了NetBeans下载和安装的方法、NetBeans的开发环境,以及在NetBeans中添加SUN公司的WTK手机开发包的方法。这种精心安排填补了目前对NetBeans工具介绍的空白,不管是对于专业的J2ME开发人员还是希望学习NetBeans的其他Java开发人员,这本书无疑都是一个很好的参考。
衷心地希望本书能成为J2ME开发人员的“良师益友”。
蒋清野
SUN 中国技术社区 高级经理
序 二
从2004年我创办J2ME开发网(http://www.j2medev.com)以来,认识了很多这个领域中的朋友,本书的作者Robin就是其中之一。今年在策划由Motorola公司和SUN公司共同发起、由J2ME开发网承办的“新亮点移动应用挑战赛”的过程中,我和Robin有了更多的接触,我感受到Robin是一个工作认真、思维敏捷、在J2ME开发领域具有多年经验的工程师,能为他的作品写序我感到非常地荣幸。
J2ME作为运用广泛的移动开发技术,为第一代开放式移动应用程序提供了平台。目前随着J2ME技术的发展、完善和手持设备的不断进步,该技术又出现了新的发展契机。运用最新的J2ME技术可以开发更加友好和强大的开放式移动应用程序,为广大的手机用户提供更丰富的增值服务。
这本介绍J2ME技术的书籍,内容非常丰富,基本上覆盖了手机应用程序开发的各个领域,包括基础知识、开发环境、多线程技术、界面设计、动画和游戏、多媒体、文件系统、短消息、通信接口等内容。对于希望学习J2ME开发的读者,这无疑是一本很好的参考用书。
我不喜欢没有注释的代码,不少的书中都有类似的问题。要知道,在实际工作中没有注释的代码将给项目带来不小的阻力。本书中的代码注释非常清楚,这使得读者在学习过程中可以非常容易地理解程序代码的含义。另外我得知书中的全部代码都可以从网站上下载,这对于读者来说一定是好消息。
我认为作者凭借多年来从事J2ME领域开发和咨询工作的经验,以缜密的思路、流畅的文笔编写的这本书是非常具有参考价值的,对于初学者或者进阶的开发者来讲都会有不小的帮助。
詹建飞
J2ME开发网CEO
此书为“SUN中国技术社区”指定技术用书
前 言
J2ME(Java 2 Micro Edition)是专门用于手机等嵌入式设备开发的Java语言,使用J2ME开发的手机程序可以在不同的软件和硬件平台上运行。J2ME是手机程序开发初学者首选的开发语言。
随着Java手机的应用越来越广,越来越多的程序员开始学习J2ME,这使得J2ME逐渐成为了一种非常流行的开发语言。在后PC时代,一些程序员将转为进行嵌入式开发,作为嵌入式开发语言的J2ME将会受到更多开发人员的青睐。在这种技术背景下,笔者依据自己多年的开发经验,编写了本书,并希望能够抛砖引玉,使读者快速进入J2ME的世界。
本书通过17章内容向读者介绍了J2ME手机程序开发中常用技术的开发方法,内容详实、结构紧凑,涵盖的技术知识繁多,具体的安排如下。
第1章 Java语言。介绍了进行J2ME开发前应掌握的Java语言的基本知识,包括基本的数据类型、基本语句结构及异常处理机制等内容。
第2章 J2ME概述。介绍了有关J2ME的知识,包括常用概念、MIDlet的定义等内容,最后通过一个简单的实例演示J2ME开发的一般过程。
第3章 NetBeans开发环境。介绍了NetBeans的下载、安装方法,MIDlet的调试技术及NetBeans的开发环境。
第4章 多线程技术。介绍了Java中的多线程技术。前面这几章是手机开发的基本内容,只有掌握了以上几章后才能够进行后面的学习。
第5章 设计简单的人机交互界面。本章介绍了Display、Screen、TextBox、Command、Ticker和Alert 5个图形界面开发中常用的类,在每一个类的介绍中都列举了相应的实例代码。
第6章 列表风格界面设计。本章分别介绍了一些用于实现用户界面中列表风格组件的类,分别为Form、List、TextField和ChoiceGroup。
第7章 高级用户界面。本章介绍了在高级用户界面设计中需要用到的几个类,包括Guage(进度条)、ImageItem(图像选项)、StringItem(字符串选项)和DateField(日期域)等。
第8章 图像和动画界面开发。本章首先介绍Canvas画布的基本使用方法,然后介绍通过Graphics类绘制基本图形、输出文本信息和显示图像的方法,最后介绍了简单动画的3种实现方法。
第9章 多媒体技术开发。本章首先介绍了MIDP和JSR 135对于媒体播放的支持,然后介绍了视频播放的方法,并给出了一个视频播放的实例程序。
第10章 动画及游戏开发。本章首先介绍了游戏画布GameCanvas的使用方法,这是游戏开发的基础,然后介绍了游戏精灵Sprite的使用方法,最后介绍了LayerManager类的图层管理和地图滚动的实现方法,在有多图层和大地图的应用程序中这部分内容非常有用。
第11章 3D图形程序开发。本章首先介绍3D程序的基本框架,然后介绍了如何通过顶点坐标生成3D物体和控制3D物体旋转的方法,最后介绍了一个3D的特效实现,即雾化效果的实现。
第12章 Messaging应用开发。本章首先介绍配置WTK中的WMA控制台的方法,然后介绍了发送和接收短消息的方法,并在此基础上进一步介绍了发送接收二进制消息和多媒体消息的方法。
第13章 基于HTTP协议的网络开发。本章首先介绍了网络开发中经常使用的一些基本概念,然后介绍了Connector接口和HttpConnection接口,最后通过实例介绍了使用GET和POST方法访问服务器的方法。
第14章 Socket编程。本章介绍了开发Socket服务器和客户端的方法,并给出了一个简单的客户/服务器聊天的实例程序。
第15章 串口通信开发。本章首先介绍如何获取手机中可以利用的串口,然后介绍标准的串口的连接和数据传输方法,最后给出一个实例演示如何利用串口进行数据的传输。
第16章 红外数据传输。本章首先介绍红外的基本概念,在此基础上介绍利用红外进行逻辑串口的通信方法。然后介绍利用IrOBEX协议进行对象交换,最后给出了一个基于IrOBEX协议进行通讯的实例。
第17章 文件系统开发。本章首先介绍输入/输出流,然后介绍JSR 75中关于文件系统的API,最后通过一个实例演示了如何使用这些API对文件系统进行访问。
本书内容由浅入深、循序渐进,是手机程序开发初学者不可缺少的参考、学习用书。
由于编写时间较为仓促,而且编者水平有限,书中难免会有疏漏和不足之处,恳请广大读者提出宝贵意见。
编者
2006年2月
无封面