J2ME电话本程序
- 格式:doc
- 大小:104.00 KB
- 文档页数:11
Move the network game according to the technical cellularphone of J2ME目录1.综述 (1)2 嵌入式技术简介 (2)2.1嵌入式应用技术蓬勃发展 (2)2.2嵌入式技术蓬勃发展的诸多原因 (3)2.3嵌入式软件技术面临挑战 (3)2.3.1 嵌入式应用软件的开发需要强大的开发工具和操作系统的支持 (3)2.3.2 网成为必然趋势 (4)2.3.3 支持小型电子设备实现小尺寸、微功耗和低成本 (4)2.3.4 提供精巧的多媒体人机界面 (4)2.4影响嵌入式技术未来的若干软件新技术 (4)2.4.1 日趋流行的行业性开放系统和备受青睐的自由软件技术 (4)2.4.2 无线网络操作系统初见端倪 (5)2.4.3 IP构件库技术正在造就一个新兴的软件行业 (5)2.4.4 J2ME技术将对嵌入式软件的发展产生深远影响 (5)2.5嵌入式软件的特点 (6)2.5.1 软件要求固态化存储 (6)2.5.2 软件代码高质量、高可靠性 (6)2.5.3 系统软件(OS)的高实时性是基本要求 (6)2.5.4 多任务操作系统是知识集成的平台和走向工业标准化道路的基础 (6)2.6嵌入式技术美好的未来 (6)3 J2ME技术简介 (8)3.1J2ME技术和嵌入式技术 (8)3.2J2ME特点 (8)3.2.1 J2ME特点 (8)3.2.2 J2ME被定位到两类产品(高级层次中) (9)3.3J2ME三层体系结构(如图3-2) (9)3.4J AVA技术版本(J2ME在J AVA技术中的定位) (10)总结 (14)错误!未找到引用源。
............................. 错误!未定义书签。
参考文献. (15)声明 (16)致谢 (17)附录1 游戏说明书 (18)1.综述随着全球信息高速公路的不断完善,电子设备日新月异,而嵌入于各类电子设备的嵌入式硬件、系统和应用软件都成为了各类设备的核心部分。
J2ME 手机游戏引擎程序结构简述游戏引擎的结构很多,不过基本上都是在一个游戏主循环内实现。
程序里面的主循环包含了程序框架的最主要的结构体。
J2me的程序一般都包含两个class文件,一个是MIDlet,一个是Displayable。
一般我都是把游戏的主要代码放在Displayable这个类里面。
这个类是基于事件驱动的程序,有三个主要相应函数void paint(Graphics g),void keyPressed(int keyCode),void keyReleased(int keyCode)。
1.使用Runnable和创建线程的主循环一般主体的做法就是让Displayable这个类实现Runnable这个接口,然后在其构造函数中创建一个线程,启动其run()函数,而run函数里面就包含了游戏的主循环。
下面是我在仙剑里面的片断代码。
Code:public class GameMIDlet extends MIDlet {static GameMIDlet instance;Display display;GameDisplayable displayable = null;public GameMIDlet() {instance = this;display = Display.getDisplay(this);displayable = new GameDisplayable();}public void startApp() {display.setCurrent(displayable);}public void pauseApp() {}public void destroyApp(boolean unconditional) {displayable.running = false;}public static void quitApp() {instance.destroyApp(true);instance.notifyDestroyed();instance = null;}}public class GameDisplayable extends FullCanvas implements Runnable {/** 主控制线程*/Thread MainThread = null;/** 游戏时钟间隔毫秒为单位*/public static long timeinterval = 20;public static boolean Isstable = true;/* 用于游戏时钟的变量*/public static long timeold = 0;public static long timenow = 0;public long interval = 0;public static long frames_per_second = 0;int count = 0;long second = 0;public static boolean running = true;public GameDisplayable() {// 开始主线程Thread MainThread = new Thread(this);MainThread.start();}public void run() {while (running) {timenow = System.currentTimeMillis();interval = timenow - timeold;if (interval >= timeinterval) {timeold = timenow;Game_Process();if (second != (System.currentTimeMillis() / 1000)) {second = System.currentTimeMillis() / 1000;frames_per_second = count;count = 1;}elsecount++;}lib.sleep(30);}}其中关于控制主循环速度的代码可以不要,但是lib.sleep(30)必须保留,因为在Nokia 60的手机上,如果去除了sleep(30),那么游戏将无法切换回来。
J2ME实验报告实验名称:RMS综合实例实验日期:2011/9/28班级:B08513学号:20084051332姓名:刘晓盟一、实验目的综合运用各种界面元素进行高级界面设计。
能够熟练应用RMS API进行J2ME编程。
二、实验环境JDK+WTK+Eclipse+EclipseMe三、实验内容完成“模拟电话本”程序1、欢迎界面:右下角“电话本”进入电话本界面。
左下角“退出”退出程序。
2、电话本界面:List显示所有电话。
右下角“添加”进入添加电话界面,“删除”删除所选电话。
左下角“返回”返回欢迎界面。
3、添加电话界面:输入姓名、电话。
右下角“确定”添加电话并回到电话本界面,左下角“返回”返回电话本界面。
四、源程序与运行结果1、welcome.javapublic class welcome extends MIDlet implements CommandListener {private Display dis;private Form mainform;private Command exit_command;private Command in_command;public welcome() {dis=Display.getDisplay(this);mainform=new Form("主页面");exit_command=new Command("退出",Command.EXIT,1);in_command=new Command("电话薄",Command.SCREEN,2);mainform.addCommand(exit_command);mainform.addCommand(in_command);mainform.setCommandListener(this);}protected void destroyApp(boolean arg0) throws MIDletStateChangeException { }protected void pauseApp() {}protected void startApp() throws MIDletStateChangeException {dis.setCurrent(mainform);}public void backwelcome(){dis.setCurrent(mainform);}public void setaddpho(){addphone addpho=new addphone(this);dis.setCurrent(addpho);}public void setphone(){phonenum ph=new phonenum(this);dis.setCurrent(ph);}public void commandAction(Command c, Displayable d) {if(c==exit_command){try {destroyApp(false);} catch (MIDletStateChangeException e) {e.printStackTrace();}notifyDestroyed();}else{setphone();}}2、Addphone.javapublic class addphone extends Form implements CommandListener { private TextField numtext;private TextField nametext;private Command back_command;private Command enter_command;private welcome midlet;public addphone(welcome midlet) {super("添加电话薄");this.midlet=midlet;numtext=new TextField("请输入电话号码","",11,TextField.NUMERIC);nametext=new TextField("请输入姓名","",10,TextField.ANY);back_command=new Command("返回",Command.BACK,1);enter_command=new Command("确认",Command.OK,2);this.append(nametext);this.append(numtext);this.addCommand(back_command);this.addCommand(enter_command);this.setCommandListener(this);}public void commandAction(Command c, Displayable d) {if(c==back_command){midlet.setphone();}else if(c==enter_command){String name=nametext.getString();String number=numtext.getString();if(name.length()!=0&&number.length()!=0){phonedata phdata=new phonedata(name,number);try {RecordStore rs=RecordStore.openRecordStore("phone", true);byte []b=phdata.encode();rs.addRecord(b, 0, b.length);rs.closeRecordStore();midlet.setphone();} catch (Exception e) {e.printStackTrace();}}else{midlet.setphone();}}}}3、phonedata.javapublic class phonedata {private String name;private String number;public phonedata() {}public phonedata(String name, String number) { = name;this.number = number;}public String getName() {return name;}public void setName(String name) { = name;}public String getNumber() {return number;}public void setNumber(String number) {this.number = number;}public byte[] encode(){byte []b=null;ByteArrayOutputStream bos=new ByteArrayOutputStream();DataOutputStream dos=new DataOutputStream(bos);try {dos.writeUTF(name);dos.writeUTF(number);b=bos.toByteArray();dos.close();bos.close();} catch (IOException e) {e.printStackTrace();}return b;}public void decode(byte []data){ ByteArrayInputStream bis=new ByteArrayInputStream(data);DataInputStream dis=new DataInputStream(bis);try {name=dis.readUTF();number=dis.readUTF();dis.close();bis.close();} catch (IOException e) {e.printStackTrace();}}}4、phonenum.javapublic class phonenum extends List implements CommandListener { private Command back_command;private Command add_command;private Command del_command;private welcome midlet;public phonenum(welcome midlet) {super("电话薄", List.IMPLICIT);this.midlet=midlet;back_command=new Command("返回",Command.BACK,1);add_command=new Command("添加",Command.SCREEN,2);del_command=new Command("删除",Command.SCREEN,3);this.addCommand(add_command);this.addCommand(back_command);this.addCommand(del_command);this.setCommandListener(this);initphone();}public void initphone(){try {RecordStore rs=RecordStore.openRecordStore("phone", true);if(rs.getNumRecords()>0){for(int i=1;i<rs.getNextRecordID();i++){phonedata phdata=new phonedata();try{byte []b=rs.getRecord(i);phdata.decode(rs.getRecord(i));this.append(phdata.getName(), null);}catch(Exception e){}}}rs.closeRecordStore();} catch (Exception e) {e.printStackTrace();}}public void commandAction(Command c, Displayable d) {if(c==back_command){midlet.backwelcome();}else if(c==add_command){midlet.setaddpho();}else if(c==del_command){try {RecordStore rs=RecordStore.openRecordStore("phone", true);for(int i=1;i<rs.getNextRecordID();i++){phonedata phdata=new phonedata();try{phdata.decode(rs.getRecord(i)); if(phdata.getName().compareTo(this.getString(this.getSelectedIndex()))==0){rs.deleteRecord(i);this.delete(this.getSelectedIndex());break;}}catch(Exception e){}}rs.closeRecordStore();} catch (Exception e) {e.printStackTrace();}}} } 2、结果图五、实验总结通过此次试验学到了多个JA VA 文件之间的相互调用,熟悉了记录库的使用。
J2ME移动软件程序设计课程设计1. 概述本课程设计旨在帮助学生掌握使用J2ME平台进行移动应用程序设计的基本技能和方法,同时通过设计与实现一个实用的移动应用程序,培养学生的软件开发能力和实践经验。
2. 设计目标本课程设计的主要目标包括:1.熟悉J2ME移动应用程序设计的基本概念和技术,包括MIDP(MobileInformation Device Profile)和CLDC(Connected Limited DeviceConfiguration)等;2.掌握J2ME移动应用程序开发的基本流程和方法,包括需求分析、设计、编码、测试和发布等;3.实现一个具有实用性的J2ME移动应用程序,提高学生的软件开发能力和实践经验。
3. 设计内容本课程设计主要包括以下内容:3.1 需求分析根据学生自由选择的主题,进行移动应用程序的需求分析,包括功能需求和非功能需求等。
3.2 概要设计根据需求分析的结果,进行移动应用程序的概要设计,包括界面设计、数据结构设计和算法设计等。
3.3 详细设计根据概要设计的结果,进行移动应用程序的详细设计,包括界面设计、模块设计和接口设计等。
3.4 编码实现根据详细设计的结果,进行移动应用程序的编码实现,包括编写程序代码、进行调试等。
3.5 测试和发布对移动应用程序进行测试和调试,并将其发布到相关的移动设备或应用商店中。
4. 设计要求本课程设计要求学生:1.自主选择移动应用程序的主题,体现创造性和实用性;2.遵循软件工程的基本原则,进行需求分析、设计、编码、测试和发布等环节;3.选择合适的开发工具和技术,包括J2ME开发环境、Java编程语言等;4.给出详细的开发文档和用户使用手册,方便其他人理解和使用。
5. 实现步骤本课程设计的实现步骤如下:1.进行主题的选择和需求分析;2.进行应用程序的概要设计;3.进行应用程序的详细设计;4.进行应用程序的编码实现和测试;5.发布应用程序并总结经验教训。
B Motorola J2ME SDK 安裝Motorola J2ME SDK Motorola J2ME SDK 目錄結構 Motorola J2ME SDK 內含的輔助開發工具 撰寫並編譯MIDlet 執行MIDlet 對MIDlet 除錯 Motorola J2ME SDK 對中文的支援B-2本附錄將為大家介紹如何使用使用命令列模式與批次檔,加上Motorola J2ME SDK 來開發Motorola iDEN、i85s 手機程式。
由於台灣在資訊通訊基礎建設方面無法滿足這兩款手機的需求,因此這兩款手機並沒有在台灣發售的打算。
但是有鑒於可能會有開發這兩款手機的需求,因此特別將本篇納入,僅供需要的人參考。
安裝Motorola J2ME SDKM otorola J2ME SDK 無法單獨取得,而是附在CodeWarrior for Java 之中。
只要您安裝了CodeWarrior for Java,就很自然地也安裝了Motorola J2ME SDK。
Motorola J2ME SDK 位於【CodeWarrior for Java 安裝目錄】\Java_Support\MotoSDK\之下。
Motorola J2ME SDK 目錄結構M otorola J2ME SDK 之後,其目錄結構如下圖:MotoS DIK附錄B Motorola J2ME SDKB-3B in 目錄之下含有使用Java 所撰寫的組態工具、除錯代理人,以及模擬器。
也含有預先審核器及模擬器啟動器。
而Bin\resources 之中放的都是目的平台的控制檔與影像檔。
BinBin \resourcesd emo 目錄下放置了範例程式的原始碼與其二進位檔。
De mo\midle tsd ocs 目錄下放置了使用說明書以及類別函式庫參考文件。
docsDocs \AP IB-4s criptsMotorola J2ME SDK 之中內附許多有趣的範例,它們位於demo/midlets/目錄底下。
简介简介使用Java编写Palm OS程序的解决方案(1)现在,使用Java语言为Palm OS编写程序的领域还没有完全统一,并且也有许多程度上的差异,目前,市面上有好几种不同的可用的应用程序接口,每种应用程序接口都给出了一个到当前的Palm OS应用程序不同程度的访问权限。
也许这其中大家最熟悉的是Sun微系统出品的产品;但是能够为Palm OS写程序的绝不只有这一种产品。
本文这一部分并不是介绍使用Java编写Palm程序的教程--因为每种我们将要讨论的解决方案都有自己的要求和值得注意的地方--而是一篇向开发者概括介绍开发工具的的文章,我们将纵观这一领域,找出在使用Java语言开发Palm OS应用程序时,你应该使用什么工具以及你又能够得到什么。
一、Sun的解决方案:KVM、Configuration和ProfileKVM是Kilobyte Virtual Machine (千字节虚拟机),那么命名是因为它的内存大小是以千字节来量度,而不是像Java虚拟机那样需要兆字节。
因为有这么苛刻的内存要求,KVM的功能只是完整JVM的的子集。
你可以从Javasoft站点上找到全部的信息,但是值得注意的是它遗漏了映射(reflection)、JNI和自定义类装载器以及一个可变的安全机制。
Sun已经制订一个计划,提供了configuration和profile来满足设备程序设计的需要。
configuration是一个应用程序接口,是设计来提供一个基础,用于一类广泛的一般的设备,所有的这些设备都有相似的特性,比如说有限的内存,偶然性强的网络连接性,低电力消耗,可运行在电池上,所以,J2Me被设计得既一般又抽象。
现在Java 2 Micro Edition(J2ME)可用的configuration有CLDC(Connected,Limited Device Configuration)和CDC (Connected Device Configuration)两种,后者用于比Palm功能更强大的设备,这就超出了我们讨论的范围;而前者,代表有限连接设备配置,是像PDA,双通道呼叫器以及移动电话。
用户手册软件版本:天天行 5.1适用手机平台:J2ME 索爱 C702泰为信息科技(上海)有限公司『版权所有,不得翻录』2008 年 5 月目录第一章 天天行服务说明 (3)第二章“天天行”简介 (4)第三章“天天行”软件的安装 (5)第四章“天天行”软件的位置 (8)第五章“天天行”的数据网络支持 (9)第六章 驾车导航示意图 (10)第七章 地图覆盖范围 (11)第八章 三维地图界面图示说明 (12)第九章 “天天行”的资费 (13)9.1 免费试用期内的用户 (13)9.2 充值卡注册用户 (13)9.3 使用天天行导航可能会需要涉及其他费用 (13)9.4 天天行充值卡购买 (13)第十章 基本操作与功能详解 (14)10.1 驾车导航 (14)10.2 城市搜索 (15)10.3电子地图 (18)10.4 地址输入 (19)10.5 导航界面 (20)第十一章 升级服务 (22)第十二章 客户服务 (23)第一章 天天行服务说明感谢您使用天天行导航软件与服务,本软件与服务由泰为信息科技(上海) 有限公司提供。
1. 客户服务:如您在使用过程中出现故障或需要帮助时可拨打客服电话。
我们将竭诚为您提供优质的服务。
2. GPS导航指示说明:GPS导航所提供的行驶路线仅供参考,如果与实际的交通指示不一致,请务必按照实地的交通指示行驶。
3. 地图数据说明:由于中国大陆地图范围广阔,各地道路建设飞速,可能造成天天行导航提供的部分地图数据无法完全实时更新4. 安全操作:为了您的驾车安全请务必在停车状态下操作天天行软件,在汽车行驶时,不要操作天天行软件,或进行其它影响行车安全的操作。
5. 安全放置:请不要将 GPS 接收器及电话支架安装在司机或乘客容易受其伤害的地方。
6. 使用限制:请确认您使用本天天行软件仅仅用于个人非商业的用途和便利,而不是用于再次出售或转让。
7. 免责声明:如果因使用本天天行软件而发生交通事故或者其他任何问题,泰为信息科技(上海)有限公司将不承担任何法律责任。
1.1跟我学J2ME手机应用开发——RMS相关技术及应用实例(第1部分)1、RMS(Record Management System)(1)移动数据库是企业移动解决方案的基本工具移动数据库系统通常应用在诸如便携式电脑、车载设备、移动电话等嵌入式设备中,它不仅能够管理本地终端的数据与信息,而且还能连接中心数据库处理各种企业事务,满足不同行业、不同的用户在移动环境下的各种信息处理需求,大大地提高了信息的时效性。
本地查询是指所需信息存储在移动设备内的嵌入式数据库中,用户在离线模式下通过查询嵌入式数据库得到所需信息的模式。
(2)可以把RMS理解为MIDP上的简单的数据库管理系统因为在某种场合下,也许会要求程序中生成的对象在程序结束后并不立即被消灭,而是把它存储到某个地方以供我们以后取用。
但J2SE中提供的可持续存储机制如JBDC和Object Serialization API并不适合用于移动设备,所以MIDP中定义了RMS来提供这种机制。
RMS是J2ME应用程序进行持久性存储的唯一途径,而应用持久性存储可以纪录游戏的排行榜、记录用户输入的用户名和密码等方面的信息。
(3)RMS其实是轻量级的嵌入式关系数据库为了支持离线操作,移动客户必须在本地存储应用程序数据,轻量级的嵌入式关系数据库是理想的数据存储工具。
与一些线性数据存储工具如纯文本文件或J2ME的记录管理系统相比,在存储复杂的数据时,嵌入式关系数据库要有效得多;智能移动客户端的嵌入式数据库可以通过无线网络与企业数据库进行数据同步,使得嵌入式数据库的数据保持更新。
2、与持久性存储有关的概念(1)什么是持久性存储持久性存储简单的理解就是数据不因为程序的退出而丢失,而一般在程序中声明的变量都是存储在stack或者heap上的,程序退出后这些数据会被清除以释放资源。
而存储在RMS 中的数据是不会被清除的。
其中的记录存储是由各个记录组成的二进制文件,而记录是记录存储中的一个存储单元,每个记录是一个字节数组。
J2ME开发环境的安装及配置J2ME(Java 2 Platform, Micro Edition)是一种用于开发移动设备应用程序的Java平台。
它提供了一个底层的Java运行时环境,适用于资源有限的设备,如手机、PDA和其他嵌入式系统。
本文将介绍如何安装和配置J2ME开发环境。
第一步:下载J2ME开发工具包(SDK)首先,您需要下载J2ME开发工具包(也称为SDK)。
可以从Oracle官网或其他第三方网站下载最新版本的J2ME SDK。
确保选择与您正在使用的操作系统相对应的版本。
第二步:安装J2ME SDK下载完成后,运行安装程序并按照提示进行安装。
通常,安装程序将要求您选择安装目录和其他一些选项。
确保选择一个合适的安装目录,以便稍后在配置环境时使用。
第三步:设置环境变量安装完成后,需要设置一些环境变量,以便系统能够正确识别和运行J2ME开发工具包。
根据您使用的操作系统,以下是一些常见的环境变量设置方法:在Windows上:1. 打开“控制面板”并点击“系统”。
2. 点击“高级系统设置”。
3. 在“系统属性”窗口中,点击“环境变量”按钮。
4. 在“系统变量”区域中,找到“Path”变量并点击“编辑”按钮。
5. 在变量值的末尾添加J2ME安装目录的路径,以分号分隔。
例如:C:\j2me_sdk\bin;(假设J2ME SDK安装在C:\j2me_sdk目录下)在Linux上:1. 打开终端。
2. 输入以下命令:export PATH=$PATH:/path/to/j2me_sdk/bin(将“/path/to/j2me_sdk”替换为您的J2ME SDK的实际安装路径)第四步:配置开发环境安装和配置开发环境的下一步是选择一个集成开发环境(IDE)来编写和调试J2ME应用程序。
下面是一些流行的J2ME开发工具:1. Eclipse:Eclipse是一款常用的Java开发IDE,可以通过安装插件来支持J2ME开发。
基于J2ME的通信簿程序设计[1]摘要:目前个性化的智能信息产品如移动电话、机顶盒、智能卡和掌上电脑等已经越来越普及。
由于这些设备本身的特点,开发者面临平台差异性大,难于移植等诸多困难,J2ME 的出现可以有效地解决这些难题。
J2ME是一种把Java语言应用于嵌入式系统的软件开发模式,具有Java技术中的很多优点,非常适合移动设备应用程序的开发。
论文首先介绍了J2ME 体系结构及其相关技术,接着介绍如何使用J2ME开发一个具有添加、删除、修改、查询四个基本功能的手机通信簿管理系统,并且给出了J2ME程序开发的流程以及基本的编程技术。
通过此通信簿管理系统的开发过程表明,使用J2ME开发移动应用程序具有编程简单、移植性强等特点,因此J2ME技术的应用将会越来越广泛。
[2]关键词:MIDP J2ME RMS 手机通信簿[3][4] 1 前言[5] 1.1 无线网络概述[6]如今,随着Internet和移动通信技术的结合,无线网络技术呈现出飞速发展的态势。
什么是无线网络呢?所谓无线网络,就是利用无线电波作为信息传输的媒介构成的无线局域网,与有线网络的用途十分类似,最大的不同在于传输媒介的不同,它利用无线电技术取代网线。
有线网络在某些场合要受到布线的限制,布线、改线工程量大、线路容易损坏、网中的各节点不可移动,对正在迅速扩大的连网需求形成了严重的瓶颈阻塞。
无线网络WLAN 就是为了解决有线网络以上问题而出现的。
通常用于无线网络的设备包括便携式计算机、台式计算机、手持计算机、个人数字设备(PDAs)、移动电话等。
无线技术应用非常广泛,例如,手机用户可以使用移动电话访问的基站连接到Internet 中。
在家中,用户可以连接桌面设备以同步数据发送文件。
这些设备给我们的生活带来很大的变化,而且发挥着越来越重要的作用。
同时,由于Internet的飞速发展使人们越来越依赖Internet上可以得到的信息,人们不再满足于手机、PDA等设备出厂时所带有的固定的有限功能,而是希望像计算机一样,能够方便的为手机、PDA等小型消费类和嵌入式设备安装各种需要的应用软件,而不是重新购买新的设备。
J2ME实验环境JDK+WTK+Eclipse+EclipseMe实验内容完成“模拟电话本”程序.源程序与运行结果源程序代码:界面控制类TestTelephoneBook.javaimport javax.microedition.lcdui.*;import javax.microedition.midlet.*;public class TestTelephoneBook extends MIDlet implements CommandListener{ private Form startForm;private Display display;private Command nextCommand;private Command exitCommand;public TestTelephoneBook() {display = Display.getDisplay(this);}protected void destroyApp(boolean arg0) throws MIDletStateChangeException {}protected void pauseApp() {}protected void startApp() throws MIDletStateChangeException {startForm = new Form("欢迎使用电话本");StringItem item = new StringItem("","欢迎使用电话本");startForm.append(item);nextCommand = new Command("电话本",Command.SCREEN,1);exitCommand = new Command("退出",Command.EXIT,1);startForm.addCommand(nextCommand);startForm.addCommand(exitCommand);display.setCurrent(startForm);}public void commandAction(Command c, Displayable d) { if(c == nextCommand){viewTelephone();}if(c == exitCommand){try {destroyApp(false);} catch (MIDletStateChangeException e) {e.printStackTrace();}notifyDestroyed();}}public void viewTelephone(){ViewTeleBook vtb = new ViewTeleBook(this);display.setCurrent(vtb);}public void returnToMe(){display.setCurrent(startForm);}public void addData(){AddTeleNum atn = new AddTeleNum(this);display.setCurrent(atn);}}电话本类AddressList.javaimport java.io.*;public class AddressList{String name; //姓名String tel; //联系电话//构造器public AddressList(String name,String tel) { = name ;}//对象属性值转换为字节数组public byte[] encode() {byte[] result = null ;try{ByteArrayOutputStream bos = new ByteArrayOutputStream() ;DataOutputStream dos = new DataOutputStream (bos) ;dos.writeUTF(name) ;dos.writeUTF(tel) ;result = bos.toByteArray() ;dos.close() ;bos.close() ;}catch(Exception e) { }return result ;}//字节数组转换为对象属性值public void decode(byte[] data) {try{ByteArrayInputStream bis =new ByteArrayInputStream(data) ;DataInputStream dis = new DataInputStream (bis) ;name = dis.readUTF() ;tel = dis.readUTF() ;dis.close() ;bis.close() ;}catch(Exception e) { }}}记录库操作类RecordStoreUtil.javaimport javax.microedition.rms.* ;public class RecordStoreUtil{* 打开指定名称的记录库,如果记录库不存在,就创建该记录库*/public static RecordStore openARecordStore(String rsname){ RecordStore rs = null ;//名称不能大于32个字符if(rsname.length() > 32) return null ;try {rs = RecordStore.openRecordStore(rsname , true);} catch (RecordStoreFullException fullStore) {//处理记录库满的异常} catch (RecordStoreNotFoundException notFoundException) { //在createIfNecessary设置为true时,这个异常不会出现} catch (RecordStoreException recordStoreException) {//处理记录库异常}return rs;}/*** 打开已经存在的记录库*/public static RecordStore openARecordStoreExisted(String rsname){ RecordStore rs = null ;//名称不能大于32个字符if(rsname.length() > 32) return null ;try {rs = RecordStore.openRecordStore(rsname , false);} catch (RecordStoreFullException fullStore) {//处理记录库满的异常} catch (RecordStoreNotFoundException notFoundException) { //处理记录库不存在的异常} catch (RecordStoreException recordStoreException) {//处理记录库异常return rs;}public static boolean closeARecordStore(RecordStore rsname){ try {rsname.closeRecordStore();} catch (Exception e) {return false;}return true;}/*** 删除记录库*/public static boolean delRecordStore(String rsname){//名称不能大于32个字符if(rsname.length() > 32) return false ;//删除记录库try{RecordStore.deleteRecordStore(rsname) ;}catch(Exception e){return false ;}return true ;}/***添加字符串数据记录*/public static int writeString(RecordStore rs,String myString){ byte[] b = myString.getBytes();int id=-1;try{id=rs.addRecord(b,0,b.length);}catch(Exception e) {//异常处理return id;}/***获取字符串数据记录*/public static String getString(RecordStore rs,int id){try{byte[] b = rs.getRecord(id);return (new String(b));}catch(Exception e) {//异常处理return null;}}/***修改字符串数据记录*/public static void setString(RecordStore rs,int id,String newString){ byte[] b = newString.getBytes();try{rs.setRecord(id,b,0,b.length);}catch(Exception e) {//异常处理}}/***添加整数数据记录*/public static int writeInt(RecordStore rs,int myInt){int id=-1;String myString=(new Integer(myInt)).toString();id=writeString(rs,myString);return id;}*获取整数数据记录*/public static int getInt(RecordStore rs,int id){int result = Integer.MIN_V ALUE ;String s=getString(rs,id);try{result = Integer.parseInt(s);}catch(Exception e) {//异常处理}return result;}/***修改整数数据记录*/public static void setInt(RecordStore rs,int id,int newInt){String myString=(new Integer(newInt)).toString();setString(rs,id,myString);}}电话本显示类ViewTeleBook.javaimport javax.microedition.lcdui.*;import javax.microedition.rms.*;public class ViewTeleBook extends List implements CommandListener { private TestTelephoneBook tbk;private AddressList al;private Command addCommand;private Command deleteCommand;private Command returnCommand;private byte[] temp;public ViewTeleBook(TestTelephoneBook tbk) {super("电话本",Choice.IMPLICIT);this.tbk = tbk;al = new AddressList("暂无","记录");RecordStore rs = RecordStoreUtil.openARecordStore("teleBook") ;RecordEnumeration rEnum = rs.enumerateRecords(null,null,true);if(rEnum.hasNextElement() == false){this.append("暂无记录",null);} else {while(rEnum.hasNextElement()){temp = rEnum.nextRecord();al.decode(temp);this.append( + "/" +al.tel,null);}}addCommand = new Command("添加",Command.SCREEN,1);returnCommand = new Command("返回",Command.BACK,1);deleteCommand = new Command("删除",Command.SCREEN,2);this.addCommand(deleteCommand);this.addCommand(addCommand);this.addCommand(returnCommand);this.setCommandListener(this);rs.closeRecordStore();} catch (Exception e){}}public void commandAction(Command c, Displayable d) {if(c == returnCommand){tbk.returnToMe();}if(c == addCommand){tbk.addData();}if(c == deleteCommand){int index = this.getSelectedIndex();try {RecordStore rs = RecordStoreUtil.openARecordStore("teleBook") ;RecordEnumeration rEnum = rs.enumerateRecords(null,null,true);if(rEnum.hasNextElement() == true){int id = -1;for(int i = 0;i <= index;i++){id = rEnum.nextRecordId();}rs.deleteRecord(id);} else {}rs.closeRecordStore();tbk.viewTelephone();} catch (Exception e) {}}}}添加号码类AddTeleNum.javaimport javax.microedition.lcdui.*import javax.microedition.rms.RecordStore;public class AddTeleNum extends Form implements CommandListener{ private TestTelephoneBook tbk;private AddressList al;private Command addCommand;private Command returnCommand;private byte[] temp;private TextField name;private TextField phoneNumber;public AddTeleNum(TestTelephoneBook tbk) {super("添加电话");this.tbk = tbk;name = new TextField("姓名:","",5,TextField.ANY);phoneNumber = new TextField("电话号码:","",12,TextField.PHONENUMBER);this.append(name);this.append(phoneNumber);addCommand = new Command("添加",Command.OK,1);returnCommand = new Command("取消",Command.CANCEL,1);this.addCommand(addCommand);this.addCommand(returnCommand);this.setCommandListener(this);}public void commandAction(Command c, Displayable d) {if(c == addCommand){al = new AddressList(name.getString(),phoneNumber.getString());temp = al.encode();try{RecordStore rs = RecordStoreUtil.openARecordStore("teleBook") ;rs.addRecord(temp, 0, temp.length);tbk.viewTelephone();rs.closeRecordStore();} catch (Exception e){}}if(c == returnCommand){tbk.viewTelephone();}}}运行结果:。