本书详细描述了如何用J2ME开发Java支持的移动电话、PDA等嵌入式无线设备的应用程序。本书共17章,分为四个层次。第1章至第4章从在模拟器中输出简单的问候语“Hello MIDP”开始,让读者对Forte CE的J2ME无线工具包和MIDlet特性有一个总体的认识。第5章至第8章着重介绍MIDP API用户交互控件及高级用户界面制作。第9章到第16章详细讲述为移动设备开发安全、使用便利的应用程序,并对开发中能遇到的安全性、网络连接、兼容性与数据操作等问题作了全面的阐述。最后第17章用一个几乎涵盖全书内容的实例程序结束全文。
本书实例丰富,源码详尽,适合于那些喜欢通过分析和修改能运行的例子程序来学习的开发者,更是热爱Java编程的开发者赶上主流无线设备新技术、学习J2ME不可多得的一本好书。
第1章 初识MIDlet \r\n\r\n1.1 Hello MIDP \r\n1.2 使用J2ME无线工具包部署应用 \r\n1.2.1 启动工具包 \r\n1.2.2 创建项目 \r\n1.2.3 准备源代码 \r\n1.2.4 建立项目 \r\n1.2.5 项目简析 \r\n1.2.6 运行应用程序 \r\n1.2.7 使用多种设备测试 \r\n1.3 协同Forte CE使用J2ME无线工具包 \r\n1.3.1 启动Forte \r\n1.3.2 创建新项目\r\n1.3.3 安装目录 \r\n1.3.4 创建一个包\r\n1.3.5 创建MIDlet Suite \r\n1.3.6 运行应用程序 \r\n\r\n第2章 动态内容 \r\n\r\n2.1 比较Date类的实现 \r\n2.2 Calendar类 \r\n2.3 TimeZone类 \r\n2.3.1 MIDP的TimeZone类 \r\n2.3.2 Java 2标准版(J2SE) \r\n\r\n第3章 Command和CommandListener \r\n\r\n3.1 Hello World第2版 \r\n3.2 运行Hello World第2版 \r\n3.3 多模拟器下的运行 \r\n3.4 建立LCDUI所需的Mind-set \r\n3.5 Command类 \r\n3.5.1 Command标签 \r\n3.5.2 Command类型 \r\n3.5.3 Command优先级 \r\n3.6 CommandListener类\r\n3.6.1 使用内部类实现CommandListener \r\n3.6.2 运行日期例子应用程序 \r\n\r\n第4章 使用随机数\r\n\r\n4.1 J2SE和MIDP的互换性\r\n4.1.1 J2SE的随机序列\r\n4.1.2 MIDP的随机序列 \r\n4.2 产生抽签数 \r\n\r\n第5章 使用MIDP API进行用户交互\r\n\r\n5.1 走近TextBox\r\n5.1.1 TextBox的更多试验 \r\n5.1.2 运行 \r\n5.2 Form类 \r\n5.3 向Form添加组件\r\n5.3.1 TextField\r\n5.3.2 TextField例子程序\r\n5.3.3 提供浮点运算 \r\n5.3.4 运行TextField例子程序 \r\n5.3.5 Choice接口 \r\n5.3.6 ChoiceGroup\r\n5.4 KMath源程序\r\n5.4.1 KMath.java\r\n5.4.2 QuasiScientificNotation.java \r\n5.4.3 KMathException.java \r\n\r\n第6章 高级用户界面组件\r\n\r\n6.1 DateField项\r\n6.1.1 DateField例子程序\r\n6.1.2 运行DateField例子程序 \r\n6.2 Gauge项 \r\n6.2.1 非交互性Gauge例子程序 \r\n6.2.2 运行非交互性Gauge例子程序 \r\n6.3 ItemStateListener接口\r\n6.3.1 交互性Gauge例子程序\r\n6.3.2 运行交互性Gauge例子程序\r\n\r\n第7章 在MIDlet内使用图形\r\n\r\n7.1 可移植网络图形文件格式(PNG)\r\n7.1.1 PNG图像\r\n7.1.2 PNG文件 \r\n7.2 MIDP对PNG的支持\r\n7.3 关联MIDlet和图像\r\n7.4 在ChoiceGroup内包含图像 \r\n\r\n第8章 用户通知 \r\n\r\n8.1 Alert类 \r\n8.1.1 使用Alert作为软件封面 \r\n8.1.2 模式Alert \r\n8.2 AlertType类 \r\n\r\n第9章 Ticker类 \r\n\r\n9.1 一个简单的Ticker \r\n9.2 Ticker的延续特性 \r\n9.3 共享的Ticker模型 \r\n9.4 Ticker-per-Screen模型 \r\n9.5 改变Ticker的内容 \r\n\r\n第10章 持久性数据 \r\n\r\n10.1 RecordStore类 \r\n10.1.1 使用RecordStore类实现计划列表 \r\n10.1.2 运行RecordStore例子应用程序 \r\n10.1.3 列举MIDlet套件的记录存储集 \r\n10.1.4 创建记录存储集 \r\n10.1.5 打开记录存储集 \r\n10.1.6 添加记录到记录存储集 \r\n10.1.7 获得记录存储集的信息 \r\n10.1.8 导航记录存储集 \r\n10.1.9 RecordEnumeration接口 \r\n10.1.10 RecordComparator接口 \r\n10.1.11 删除记录 \r\n10.1.12 修改记录 \r\n10.1.13 RecordFilter接口 \r\n10.2 RecordStoreDemo源代码 \r\n\r\n第11章 记录存储集作为便携式日志 \r\n\r\n11.1 跟踪燃料消耗 \r\n\r\n第12章 简单联网 \r\n\r\n12.1 通用连接框架 \r\n12.2 查询时间服务器 \r\n12.2.1 服务器 \r\n12.2.2 客户端 \r\n12.2.3 运行例子程序 \r\n\r\n第13章 套接字通信 \r\n\r\n13.1 检查订单状态 \r\n13.1.1 服务器 \r\n13.1.2 运行例子程序 \r\n13.2 查询Skills数据库\r\n13.2.1 服务器 \r\n13.2.2 运行第二个Skills例子程序 \r\n13.3 从服务器端获取相片 \r\n13.3.1 服务器 \r\n13.3.2 运行图片检索例子程序 \r\n\r\n第14章 独立式办公室 \r\n\r\n14.1 随身携带办公室 \r\n14.2 编写独立式办公室代码 \r\n14.2.1 独立式办公室MIDlet \r\n14.2.2 独立式办公室服务器 \r\n\r\n第15章 高级联网 \r\n\r\n15.1 HttpConnection接口 \r\n15.2 本地天气 \r\n15.2.1 客户端 \r\n15.2.2 服务器端 \r\n15.2.3 运行例子程序 \r\n15.3 利用HttpConnection查询Skills数据库 \r\n15.3.1 客户端 \r\n15.3.2 服务器 \r\n15.3.3 运行例子程序 \r\n15.4 订单状态查询 \r\n15.4.1 客户端 \r\n15.4.2 服务器 \r\n15.4.3 运行例子程序 \r\n15.5 签名验证 \r\n15.5.1 客户端 \r\n15.5.2 运行例子程序 \r\n\r\n第16章 登录与MD5 \r\n\r\n16.1 简单登录 \r\n16.1.1 客户端 \r\n16.1.2 服务器 \r\n16.1.3 运行例子程序 \r\n16.2 使用MD5保护口令\r\n16.2.1 客户端 \r\n16.2.2 服务器 \r\n16.2.3 运行例子程序 \r\n16.3 MD5算法的J2ME版本 \r\n16.3.1 MD5.java \r\n16.3.2 Base64.java \r\n16.3.3 Base64Exception.java \r\n\r\n第17章 一个消息转发的应用程序 \r\n\r\n17.1 一个最小的安全消息应用程序 \r\n17.1.1 客户端 \r\n17.1.2 服务器 \r\n17.1.3 运行例子程序 \r\n17.2 Enigma代码 \r\n17.2.1 EnigmaMachine.java \r\n17.2.2 EnigmaRotor.java \r\n17.2.3 EnigmaReflector.java \r\n17.2.4 EnigmaRotorTrippledException.java \r\n17.3 结论 \r\n\r\n附录A 安装必备软件 \r\n\r\nA.1 Java Community Edition集成开发环境:Forte \r\nA.2 J2MEWTK(J2ME无线工具包) \r\nA.3 Palm OS模拟器(POSE) \r\nA.4 MySQL关系型数据库管理系统 \r\nA.5 MySQL所用的JDBC驱动程序 \r\nA.6 Apache Web服务器 \r\nA.7 Tomcat Servlet容器 \r\nA.8 mod_jk \r\nA.9 光盘中的软件 \r\nA.9.1 MIDlets \r\nA.9.2 创建数据库表的SQL语句文件 \r\nA.9.3 独立运行的程序和服务器 \r\nA.9.4 J2EE软件 \r\n\r\n附录B MIDP API \r\n\r\nB.1 Java.io包 \r\nB.1.1 DataInput接口 \r\nB.1.2 DataOutput接口 \r\nB.1.3 ByteArrayInputStream类 \r\nB.1.4 ByteArrayOutputStream类 \r\nB.1.5 DataInputStream类 \r\nB.1.6 DataOutputStream类 \r\nB.1.7 InputStream类 \r\nB.1.8 InputStreamReader类 \r\nB.1.9 OutputStream类 \r\nB.1.10 OutputStreamWriter类 \r\nB.1.11 PrintStream类 \r\nB.1.12 Reader类 \r\nB.1.13 Writer类 \r\nB.2 java.lang包 \r\nB.2.1 Runnable接口 \r\nB.2.2 Boolean类 \r\nB.2.3 Byte类 \r\nB.2.4 Character类 \r\nB.2.5 Class类 \r\nB.2.6 Integer类 \r\nB.2.7 Long类 \r\nB.2.8 Math类 \r\nB.2.9 Object类 \r\nB.2.10 Runtime类 \r\nB.2.11 Short类 \r\nB.2.12 String类 \r\nB.2.13 StringBuffer类 \r\nB.2.14 System类 \r\nB.2.15 Thread类 \r\nB.2.16 Throwable类 \r\nB.3 java.util包 \r\nB.3.1 枚举接口 \r\nB.3.2 Calendar类 \r\nB.3.3 Date类 \r\nB.3.4 Hashtable类 \r\nB.3.5 Random类 \r\nB.3.6 Stack类 \r\nB.3.7 Timer类 \r\nB.3.8 TimerTask类 \r\nB.3.9 TimeZone类 \r\nB.3.10 Vector类 \r\nB.4 javax.microedition.io包 \r\nB.4.1 Connection接口 \r\nB.4.2 ContentConnection接口 \r\nB.4.3 Datagram接口 \r\nB.4.4 Datagram Connection接口 \r\nB.4.5 HttpConnection接口 \r\nB.4.6 InputConnection接口 \r\nB.4.7 OutputConnection接口 \r\nB.4.8 StreamConnection接口 \r\nB.4.9 StreamConnectionNotifier接口 \r\nB.4.10 Connector类 \r\nB.5 javax.microedition.lcdui包 \r\nB.5.1 Chocie接口 \r\nB.5.2 CommandListener接口 \r\nB.5.3 ItemStateListener接口 \r\nB.5.4 Alert类 \r\nB.5.5 AlertType类 \r\nB.5.6 Canvas类 \r\nB.5.7 ChoiceGroup类 \r\nB.5.8 Command类 \r\nB.5.9 DataField类 \r\nB.5.10 Display类 \r\nB.5.11 Displayable类 \r\nB.5.12 Font类 \r\nB.5.13 Form类 \r\nB.5.14 Gauge类 \r\nB.5.15 Graphics类 \r\nB.5.16 Image类 \r\nB.5.17 ImageItem类 \r\nB.5.18 Item类 \r\nB.5.19 List类 \r\nB.5.20 Screen类 \r\nB.5.21 StringItem类 \r\nB.5.22 TextBox类 \r\nB.5.23 TextField类 \r\nB.5.24 Ticker类 \r\nB.6 Javax.micoreidtion.midlet包 \r\nB.7 Javax.micoreidtion.rms包 \r\nB.7.1 RecordComparator接口 \r\nB.7.2 RecordEnumeration接口 \r\nB.7.3 RecordFilter接口 \r\nB.7.4 RecordListener接口 \r\nB.7.5 RecordStore类
关于本书
如果列出已移植Java语言的所有硬件和操作系统的话, 这张列表将会长得令人惊叹不已, 因而不要再诧异于快速涌现出的那么多开始趋向支持Java模型的手持设备. 将Java移植到小型设备上是很大的一种挑战, 它已经使Java的足迹开始进入到一个全新的境界, 任何将Java2标准版(J2SE)或者Java2企业版(J2EE)应用到小型设备上的想法都已经完全不成问题了.
那么, 应该怎样将Java移植到小型设备上呢?第一种想法可能是, 缩减所有对小型设备来说并不急切需要的功能. 但是这样一来会显著地降低Java的功能覆盖, 而且未必有助于问题的解决. 创建这样一个Java的更小版本问题的解决方案实质上就是-创建一个Java的更小版本. 与其想通过限制已有平台的规模来解决问题, 不如借用J2SE中合适的东西脚踏实地从基础做起, 正是这种努力导致了称为Java2缩微版也称J2ME(Java2MicroEdition)的Java2的新版本的出现.
现在, 不要急切地想去寻找J2ME软件, 首先应该知道J2ME并不是一种产品, 而是一种技术, J2ME包括两种类型的组件, 即配置(configuration)和概要描述(profile).
配置(configuration)是一系列低层次的API(应用编程接口)和一种为系列设备优化的虚拟机. 当今使用的有两种公用配置, 连接的设备配置(CDC)和限制连接的设备配置(CLDC).
CDC提供了一种虚拟机, 以及在像智能发报机. 寻呼机. 个人数字助理(PDA)和电视机顶盒这样的设备上支持Java应用的基类库. 这些设备的典型特征是具有一个32位的处理器和用来支持虚拟机与类库的超过2MB的存储容量:CVM虚拟机正好满足了它们对于Java 2虚拟机特征集的功能需求. 这是在小型平台上全特征的虚拟机.
CLDC提供一个适合于小型的. 资源受限的. 连接的设备上使用的标准Java平台. 这些设备的典型特征是具有一个16位或者32位的处理器和用来支持虚拟机和类库的160KB到512KB的总内存, 它们通常以电池供电, 并联入某类网络中, 联网一般使用的带宽时常小于9600bit/s的无线的. 断断续续的连接方式. CLDC的核心是K虚拟机(KVM). “K”标记表明它们的大小是以kilobytes(千字节)衡量的. CLDC的特征也是饮食一系列类库.
概要描述(profile)是一种规范, 它详细描述了架构在配置之上并使用配置的一系列API, 它们一起为专用设置类型提供完整的运行环境. 描述的一个例子是创建在CDC之上的基础概要描述(foundation Profile), 它为像住宅网关. 灵敏电话和双向寻呼机这样的设备为目标的应用提供完整的J2ME运行时环境. 另—种概要描述是移动信息设备概要描述(MIDP), 它构建在CLDC之上, 为那些运行在像移动电话和登录级PDA这样的设备上的应用提供完整的J2ME运行时环境. MIDP致力于解决用户界面. 持久存储. 联网和应用程序文件生命周期这样的问题.
本书主要着眼于MIDP和MIDlet上, MIMlet是指那些使用由MIDP和CLDC规范定义的API编写的应用程序.
本书读者对象
本书针对那些喜欢通过分析和修改能运行的例子程序来学习的开发者. 只要愿意, 你可以简略地阅读这本书, 但是如果你实际运行代码的话, 可能会学习得更好. 如果你真的很想掌握本书中的全部知识, 就会想要自己创建每个例子程序的变种, 当然更好的是根据各章节中介绍的技术尝试性地编写自己的骓程序, 而将书中的例子作为一种参考指南. 在开始之前, 应该安装所有预先要求的软件, 它们都在附录A中作了说明.