J2ME内存优化
基于J2ME技术的移动游戏开发平台
华南理工大学硕士学位论文基于J2ME技术的移动游戏开发平台姓名:***申请学位级别:硕士专业:计算机应用指导教师:***20050501第二章.J2.Ug平台分析低配置设备高配置设备2.1,2配置概述配置将运行时环境定义为一组核心类和一个运行在特定类型设备上的特定JVM。
虽然还可能在将来定义其他的配置,但当rillJ2.\_iE存在两种配置,CLDC和CDC。
连接限制设备配胃(CLDC):与虚拟机KVM一起,用十内存有限ff勺【6位或32位殴备。
这是用于开发小型J2ME应用程序的配置(虚拟机)。
从游戏程序员的角度看,它的大小限制让它比CDC更具挑战性。
CLDC同时还是用于开发绘图工具应JE{=j程序的配置。
目前许多支持1J2,h1E技术的手机便是个运j亍小应用程序的小型无线设备的示例川。
连接设备配置(CDO:与虚拟机CV;I一起使用,用于要求内存超过2兆的32位体系结构。
互联网电视机顶盒和某些PDA便是这类设备的一个示例I71,目前,己上市的手机跨越CLDC和cDC两个配置舰范,有些智能手机的硬件配置甚至超越了CDC规范。
第一二章12ME平台分析的移动设备从手机到PDA,而这些移动设备的硬件差异也比较的大。
要作为可移植的移动游戏开发平台,J2ME存在许多不足之处。
2.2J2ME平台缺陷从上面论述可以看出,处理芯片、显示尺寸等硬件因素造成了手机设备具自‘较大的差异性。
显示尺寸的不同将使应用程序无法通用在不同设备中,比如说某些功能菜单显示1i了.某些功能按钮显示不了等等。
囚此,这一差异性使得丌发人员不得不针对具体的各种手持设备进行开发,在一种设备中调试通过的程序,还要在另外一种设备中进行调试。
如果希望应用程序具备更好的通用性,那么自然要研究更多的手机,这样就造成了开发成本的提高[81。
无论是移动游戏电好,普通的J2ME应用程序MIDLet也好,它可能运行在KVMtCLBC配置)上,或CVM(CDC配置)上,而这两个平台对程序丌发有不毕南理工大学硕士学位论文同的要求。
JVM调优总结
JVM性能调优Posted on 2010-06-26 06:48 chen77716阅读(1208) 评论(3) 编辑收藏最近因项目存在内存泄漏,故进行大规模的JVM性能调优,现把经验做一记录。
一、JVM内存模型及垃圾收集算法1.根据Java虚拟机规范,JVM将内存划分为:∙New(年轻代)∙Tenured(年老代)∙永久代(Perm)其中New和Tenured属于堆内存,堆内存会从JVM启动参数(-Xmx:3G)指定的内存中分配,Perm 不属于堆内存,有虚拟机直接分配,但可以通过-XX:PermSize -XX:MaxPermSize等参数调整其大小。
∙年轻代(New):年轻代用来存放JVM刚分配的Java对象∙年老代(Tenured):年轻代中经过垃圾回收没有回收掉的对象将被Copy到年老代∙永久代(Perm):永久代存放Class、Method元信息,其大小跟项目的规模、类、方法的量有关,一般设臵为128M就足够,设臵原则是预留30%的空间。
New又分为几个部分:∙Eden:Eden用来存放JVM刚分配的对象∙Survivor1∙Survivro2:两个Survivor空间一样大,当Eden中的对象经过垃圾回收没有被回收掉时,会在两个Survivor之间来回Copy,当满足某个条件,比如Copy次数,就会被Copy到Tenured。
显然,Survivor只是增加了对象在年轻代中的逗留时间,增加了被垃圾回收的可能性。
2.垃圾回收算法垃圾回收算法可以分为三类,都基于标记-清除(复制)算法:∙Serial算法(单线程)∙并行算法∙并发算法JVM会根据机器的硬件配臵对每个内存代选择适合的回收算法,比如,如果机器多于1个核,会对年轻代选择并行算法,关于选择细节请参考JVM调优文档。
稍微解释下的是,并行算法是用多线程进行垃圾回收,回收期间会暂停程序的执行,而并发算法,也是多线程回收,但期间不停止应用执行。
J2ME技术在手机游戏的发展分析毕业论文
J2ME技术在手机游戏的发展分析毕业论文目录摘要....................... 错误!未定义书签。
Abstract ..................... 错误!未定义书签。
第1章绪论 (1)第2章 J2ME技术概览 (2)2.1 J2ME的概念 (2)2.2 J2ME简介 (2)2.2.1 J2ME架构 (3)2.2.2 JVM ( 虚拟机 ) (3)2.2.3 MIDP(移动信息设备简表) (4)2.3 手机游戏的发展 (5)2.3.1 目前国内的发展情况 (5)2.3.2 目前国际的发展情况 (6)第3章游戏设计的需求分析 (9)3.1 MIDP中的游戏API (9)3.2 游戏类构成 (9)3.2.1 Boxer类的实现 (10)3.2.2 GameCanvas类的功能及特点 (10)3.2.3 Sprite类的功能及特点 (11)3.3游戏角色的处理 (11)3.4 游戏中的事件处理 (12)3.4.1 key Pressed方法 (12)3.4.2 key Released方法 (13)第4章“Pocket Boxing”手机游戏开发制作 .. 144.1 游戏编程 (14)4.2 格斗类手机游戏实例 (14)4.2.1 “Pocket Boxing”游戏背景介绍及开发环境 (14)4.2.2 MIDlet的构成 (15)4.2.3 MIDlet的生命周期 (16)4.2.4 MIDlet的画面显示基础 (16)4.2.5 游戏项目的创建 (18)4.2.6 命令种类及命令处理 (19)4.2.7 游戏中的描绘处理 (21)4.2.8 游戏状态的类变量 (23)4.2.9 按键事件的处理 (24)4.2.10 设计存在的难点 (25)第5章手机游戏开发过程中的困难 (26)5.1 手机游戏开发存在的困难 (26)5.1.1 移动开发存在的问题 (27)5.1.2 操作环境不兼容性问题 (27)5.1.3 显示速度方面的问题 (28)5.1.4 不同的屏幕尺寸问题 (28)5.1.5 输入问题 (28)5.2 解决方案 (29)第6章 J2ME手机游戏前景展望 (31)6.1 J2ME手机游戏的优势 (31)6.2 J2ME手机游戏的开发意义 (32)第7章结论 (35)致谢 (36)参考文献 (37)英文资料翻译 (38)第1章绪论手机是人们日常生活中所用的非常频繁的通信工具,虽然现在其费用比有线电话高,但是其随时随地的沟通优势,使人们摆脱了线路的束缚。
在J2ME中,RMS作为唯一的永久性存储工具,其重要性是不言而喻的
在J2ME中,RMS作为唯一的永久性存储工具,其重要性是不言而喻的。
但是很多刚刚开始学习J2ME的新人总是抱怨在这方面的资料很少,或者是针对性不强。
因此,我想把自己在这方面的一些学习心得和大家交流一下。
RMS即Record Manager System,在手机应用中常常作为得分记录、游戏信息存储等的工具使用。
RMS的使用可以分为两个部分:一、单一记录的构造;二、RecordStore的使用和操作。
下面就这两方面进行详细说明。
一、单一记录的构造。
我们在存储记录时可能需要记录很多相似的条目,在这里我们可以把这种结构看成数据库,我们在这一步就是要构造数据库中的一行,即单一记录的构造。
程序的源码如下:package ual;import java.io.ByteArrayInputStream;//要使用到的各种输入输出流import java.io.ByteArrayOutputStream;import java.io.DataInputStream;import java.io.DataOutputStream;public class Appointment {//单一记录的类名private int int1; //private int int2; //private long long1;private String str1; //str1作为保留字段,记录检索的关键字private String str2; //private String str3; //private boolean WroteFlag; //public Appointment() {}public Appointment(int _int1, int _int2, long _long1, String _str1,String _str2, String _str3, boolean _WroteFlag) {this.int1 = _int1; //写入RMS的构造函数this.int2 = _int2;this.long1 = _long1;this.str1 = _str1;this.str2 = _str2;this.str3 = _str3;this.WroteFlag = _WroteFlag;}public Appointment(byte[] rec) {initAppointmnet(rec); //读取RMS内容的构造函数}public byte[] toBytes() { //写成字节byte[] data = null;try {ByteArrayOutputStream baos = new ByteArrayOutputStream(); DataOutputStream dos = new DataOutputStream(baos); dos.writeInt(int1);dos.writeInt(int2);dos.writeLong(long1);dos.writeUTF(str1);dos.writeUTF(str2);dos.writeUTF(str3);dos.writeBoolean(WroteFlag);data = baos.toByteArray();baos.close();dos.close();} catch (Exception e) {e.printStackTrace();}return data;}public void initAppointmnet(byte[] rec) { //从字节读取内容ByteArrayInputStream bais = new ByteArrayInputStream(rec); DataInputStream dis = new DataInputStream(bais);try {int1 = dis.readInt();int2 = dis.readInt();long1 = dis.readLong();str1 = dis.readUTF();str2 = dis.readUTF();str3 = dis.readUTF();WroteFlag = dis.readBoolean();} catch (Exception e) {e.printStackTrace();}}public int getInt1() { //intreturn int1;}public int getInt2() {return int2;}public long getLong1() {return long1;}public String getStr1() { //Stringreturn str1;}public String getStr2() { //Stringreturn str2;}public String getStr3() {return str3;}public boolean getWroteFlag() { //返回写入标志return WroteFlag;}}这个类的使用保证了我们在使用流时,内容的写入和输出。
J2ME开发环境的配置和J2ME框架
J2ME开发环境的配置和J2ME框架2.1 JDK的安装首先本课题是Java程序的开发,就需要在电脑上首先搭建好Java开发平台,目前搭建Java的基本开发环境所需要的是JDK。
JDK(Java Development Kit)是Sun Microsystems针对Java开发员的产品。
自从Java推出以来,JDK已经成为使用最广泛的Java SDK。
JDK 是整个Java的核心,包括了Java运行环境,Java工具和Java基础的类库。
JDK是学好Java的第一步。
而专门运行在x86平台的Jrocket在服务端运行效率也要比Sun JDK好很多。
从SUN的JDK5.0开始,提供了泛型等非常实用的功能,其版本也不断更新,运行效率得到了非常大的提高。
JDK里面包括:SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。
EE(J2EE),enterprise edition,企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。
ME(J2ME),micro edtion,主要用于移动设备、嵌入式设备上的Java应用程序,从JDK 5.0开始,改名为Java ME。
SE(J2SE),standard edition,标准版,是我们通常用的一个版本,从JDK 5.0开始,改名为Java SE。
EE(J2EE),enterprise edition,企业版,使用这种JDK开发J2EE应用程序,从JDK 5.0开始,改名为Java EE。
ME(J2ME),micro edtion,主要用于移动设备、嵌入式设备上的Java应用程序,从JDK 5.0开始,改名为Java ME。
JDK包含的基本组件包括:(1)Javac–编译器,将源程序转成字节码(2)jar–打包工具,将相关的类文件打包成一个文件(3)Javadoc–文档生成器,从源码注释中提取文档(4)jdb–debugger,查错工具(5)Java–运行编译后的Java程序(.class后缀的)appletviewer:小程序浏览器,一种执行HTML文件上的Java小程序的Java浏览器。
J2ME游戏开发的高级优化技巧
J2ME游戏开发的高级优化技巧本文将讲述代码优化对于编写高效的手机游戏的重要性。
我将使用例子来为大家讲述何时使用何种方法来优化你的代码,使得我们的程序尽可能的挖掘MIDP在手机中所剩无几的表现力。
我们将会看到如何使用J2ME Wireless Toolkit的Profiler功能来找出优化代码的位置,最后我会给出编写J2ME程序的忠告。
为什么要优化?游戏能够被划分为两种较广泛的类型:实时型和按键驱动型。
按键驱动类型的游戏一般在屏幕上显示游戏目前所处的状态,并且等待玩家输入某些按键来驱动游戏继续运行。
棋牌类游戏,大部分的解谜类游戏以及策略类和文字类游戏都属于这类游戏。
而实时游戏,特别是动作游戏不会等待玩家的输入,他们一直运行直到游戏的结束。
动作类游戏一个重要的特征就是将大量的运算花在屏幕显示上,而且刷新率(FPS)必须保持在10以上。
这类游戏还必须要有大量的动作来使得游戏具有更高的挑战性。
这类游戏需要玩家有快速的反应和很好的手眼协调能力,所以这类游戏对键盘输入的反应也有极高的要求。
为使得程序在高速运行时能对键盘做出及时的反应,图像能以高速的FPS来运行,我们就必须优化我们的代码,以使得我们的程序能以最快的速度运行。
J2ME是一个精简的Java版本,适合只有有限容量的小型设备,例如手机和PDA,J2ME 设备有:◆有限的输入能力◆屏幕尺寸很小◆受限的内存及堆大小◆很慢的CPU这些特点使得在J2ME平台上编写快速的游戏并不是件易事。
相对于电脑游戏来说,编写J2ME平台上的游戏会对程序有更高的要求和更进一步的挑战。
何时不用优化?如果你编写的游戏不时动作游戏,有可能不必去优化。
假如玩家需要几秒钟甚至几分钟去思考他下一步怎样走,那他将不会注意到你的游戏的按键响应超过几百毫秒。
不过一个例外是如果你的程序需要大量的运算去决定它下一步怎样走,例如棋类游戏需要在几百万种组合中去寻找。
假如这样的话,你有可能想要优化你的代码以使得电脑仅需要几秒钟而不是几分钟去决定他下一步的动向。
J2ME简明教程( 第四章)
4.2.1Command编程基础
高级屏幕类TextBox、List和Form都可以在屏幕上添加Command(菜单项)。mand就是一般应用程序中使用的系统菜单中的菜单项的概念。由于Displayable对象中定义了addCommand()/removeCommand()两个方法,意味着Command类适用于高级API(Screen)与低级API(Canvas)。
第三个参数是优先权,号码越低优先权越高,优先权越高,代表用户越能够方便的找到它们。数值相同时,使用方法本身默认的数值。
例:
Form f = new Form(“test”);
Command c = new Command(“menu1”, Command.Screen, 1);
f.addCommand(c );
【关键字】:J2ME
【来 源】:/allan_sun/archive/2006/08/09/1043151.aspx
J2ME简明教程( 第四章)
LCDUI
LCDUI——Limited Configuration Device UI。提供了用户接口。
?? 了解基本屏幕类的开发
MIDP用户界面设计开发不同于一般的桌面程序,受限于屏幕大小、颜色、内存和处理能力。好的界面应该根据设备具体情况有针对性地设计。
4.1 MIDP高级界面开发
高级API提供了常用的控件,强调可移植性,只能有限控制控件外观,事件的使用也很有限。
4.1.1 Display类的开发
└Visual C++
第1讲J2ME基本概念
J2ME简介
Sun Microsystem对J2ME的定义:
一种以广泛的消费性产品为目标的高度优化 的Java运行环境。 J2ME平台为嵌入式消费类电子产品,如移动 电话\PDA\电视机顶盒\汽车导航系统等提供 了一个通用的开发平台. J2ME的全称是Java 2 Platform Micro Edition, 即Java 2平台微型版
第一章 揭开J2ME平台的神秘面纱
解志君 E-mail: john_xzj_india@
学习目标
了解J2ME的发展历史
了解J2ME与J2EE及J2SE的联系和区别 了解J2ME的体系结构
掌握KVM
掌握CLDC与CDC,以及他们之间的区别和
联系 掌握MIDP 掌握J2ME的开发环境
是指以应用为中心、以计算机技术为基础, 软件硬件可裁剪、适应应用系统对功能、可 靠性、成本、体积、功耗严格要求的专用计 算机系统。举例来说,大到油田的集散控制 系统和工厂流水线,小到家用VCD机或手机, 甚至组成普通PC终端设备的键盘、鼠标、硬 盘、Modem等均是由嵌入式处理器控制的。
嵌入式操作系统
简档(Profile)
Kjava中的APIs是sun公司特别制订的,主要
运行于Palm OS上。 Foundation Profile 是另一种简档,主要用于 CDC设备。
J2ME的应用
移动电子商务
E-business、E-commerce、M-business与
M-Commerce 手机游戏
JAVA技术概览
J2EE为开发基于组件的多层应用程序提供了
标准. J2EE平台通过提供标准化\模块化的组 件来简化企业级应用程序的开发 与j2se\j2ee和Java Card 一样,J2ME同样包含 一个小型的虚拟机和一系列的Java API Java卡为运行在智能卡或者内存和处理器都 非常受限的设备上的应用程序提供了安全的 环境
Eclipse_3.5.2配置J2ME环境
Eclipse 3.5.2配置J2ME环境
一、下载EclipseMe1.7.9
下载地址是:
/projects/eclipseme/files/二、下载好以后(注意不要解压缩)
打开Eclipse 选择 Help ---> Insert New Software 如图的界面
单击add
界面如图
单击archive 选择eclipseme压缩包的路径Name 可以随便起不过最好是Eclipseme
单击“确定”
选中EclipseMe 点击“下一步”
一直点“下一步” 最后同意协议,再点“完成”
可以看到Eclipse的安装进度条(等一下重启Eclipse就好了)安装好后的界面是
安装好EclipseMe后在安装WTK2.5.2
WTK2.5.2下载地址是:
/products/sjwtoolkit/download.html 单击“download”就能直接下载(在网页的中下部)
安装好WTK2.5.2后配置WTK2.5.2
在Eclipse ——》首选项——》点击J2ME
单击 "inport"
再单击“Browse” 找到WTK2.5.2的安装路径(文件夹)单击“Refresh”结果如图
单击“完成”
好了到此Eclipse配置J2ME环境就好了,可以直接变写J2me文件了。
J2ME在移动设备上的应用
J2ME技术在移动设备上的应用J2ME技术在无线设备上的应用说明本文是在我的毕业论文的基础上稍作修改而成由于原论文的主旨是试图对J2ME平台已及J2ME对移动信息设备编程即MIDP编程给出一个概述性的介绍所以只给出了非常少量的示例并且很多部分语焉不详例如对于MIDP的UI编程部分只是对各种UI组件给出了一个简单的描述所以本文并非是一个Step By Step学习J2ME编程的教材这一点希望读者注意另外需要说明一点限于篇幅原论文并未对MIDP的网络库及网络编程做出讨论如果时间允许的话我打算对各部分进行补充并添加示例请读者留意未来的更新版本关于本文的版权本文作为电子文档可以被免费复制阅读并用于非盈利性活动中但请保留原文档全文不做改动未经作者允许请勿用于任何盈利性活动中本文中有两幅图参照了王森moli兄的Java手机程式设计入门一书中的画法特此感谢moli兄多谢了^_^Java研究组织吴一丁2002.6Java研究组织 摘要本文介绍了Java2平台微型版的基本内容以及如何使用CLDC连接受限设备配置和MIDP移动信息设备描述AbstractIntroducing the Java 2 Micro Edition Platform and addressing how to write Application upon it This article focus on the CLDC Connected,Limited Device Configuration and MIDP Mobile Information Device Profile programming with the introduction of MIDlet and its UI and RMS Record Manage System关键词keywordJava Java2 Platform J2ME MIDP CLDC MIDlet RMSJ2ME技术在无线设备上的应用索引摘要 (1)Abstract (2)关键词keyword (2)索引 (3)第一章J2ME概述 (5)1.1 J2ME缘起 (5)Java的发展与J2ME的出现 (5)移动应用与移动通讯市场 (5)J2ME的历史与前景 (7)1.2 Java版本的变迁 (8)Java的三个版本 (8)J2ME的优势 (8)J2ME与J2SE之间的关系 (9)1.3 J2ME的体系结构 (10)J2ME的体系结构总体概览 (10)何谓Configuration与Profile (10)Profile (11)J2ME Configuration (11)CDC (12)CLDC (12)J2ME Profiles (15)Foundation profile (15)Personal 和 personal Basis profile (15)RMI Profile (16)MID Profile (16)Pda profile (17)第二章CLDC/MIDP编程概述 (18)2.1 J2ME的CLDC/MIDP软件体系架构 (18)2.2 MIDlet及其运行机制 (20)MIDlet (20)MIDlet的lifecycle (22)MIDlet suite (23)MIDlet的执行环境 (28)2.3 MIDP用户界面编程概述 (30)MIDP的UI模式与类库结构 (30)Java研究组织 MIDP GUI 模型 (31)MIDP 的UI包 (31)MIDP GUI编程的一般模式 (33)抽象命令Command对象与Command的侦听 (34)High level界面编程 (35)使用Screen (35)List (36)TextBox (37)Alert (38)Form (39)low-level 界面编程 (41)Low-level界面编程的一般模式 (41)Canvas的低级事件处理 (43)2.4可持续存储与RMS (44)RMS(Record Management System)简介 (44)Record Store与Record (44)RMS包 (45)RMS编程 (46)对Record Store进行操作 (46)使用Record (47)record的过滤比较侦听和枚举 (48)结束语 (49)参考文献 (49)J2ME技术在无线设备上的应用第一章J2ME概述1.1 J2ME缘起Java的发展与J2ME的出现自从1995年Java语言正式推出以来Java技术立刻成为被人们追逐的热门话题然而早期的Java的真实能力与媒体的炒做有着相当大的差距所以一段时间之后Java被冷落了然而随着时间的推移Java日趋成熟它逐渐变得更加稳定可靠性能也有了大的提高到了1999以后人们逐渐发现用Java开发EJB很好用JSP开发web page也比ASP来得强大然后Java 开始向server side移动作为连接客户机数据库应用服务器之间的中间件展现出其跨平台多线程连网能力强大类库丰富这些特有的魅力现在Java又开始进入嵌入式系统并且在手持设备车载电脑智能卡等领域站稳了脚跟并逐渐成为既定的标准有趣的是Java本来就是为了开发数字家电而被研发的经过不断的变迁由device到desktop到server内部现在Java 又回到了最初的起点正好形成一个周而复始的圆J2ME也就是Java 2 Platform, Micro Edition最早是在1999年6月的JavaOne1大会上被正式提出是Sun专门为小型的资源受限的消费性电子设备的应用程序开发所提供新的Java 版本它广泛的使用于例如蜂窝电话cell phone双向传唤机two-way pager PDA个人数字助理以及电视机顶盒等众多小型资源受限设备中相对于我们平常在desktop上使用的J2SE你可以粗略的把J2ME理解为在微型设备上使用的Java平台移动应用与移动通讯市场进入2000年以来移动通讯市场竞争日趋激烈各大电信服务提供商与手机PDA等通讯电子产品生产商为了争夺用户份额以及未来的利润以前所未见的迅猛之势不断推出各种新颖的服务1 JavaOne是Sun每年举行的针对Java技术的大型研讨会来自世界各地的Java程序员汇聚一堂交流最新的Java 技术Sun也会在那时发布Java的最新产品并试图指出Java未来的发展方向Java研究组织 与新一代的通讯产品而软件市场更是把目光投向了这被认为具有无穷潜力标志着未来市场走向的移动应用市场未来科技的发展使人们相信在今后的若干年里大部分的这些通讯产品都将会与互联网相连这将导致人们看待和使用通讯产品的方式的转变用户的要求将不止局限于普通的通讯更重要的是对日益增强地对信息的需求用户可能需要访问Web站点的内容查询企业的数据库的资料以及管理个人的私人数据用户需要在任何时间任何地点以至于使用任何设备来获取信息未来的设备将更为人性化和用户化而这种人性化与用户化同时也就意味着通讯设备的应用平台必须更加多元化图1.1 通讯产品与互联网相连这时矛盾出现了多元化的设备平台也带来了开发的不便你可以设想一下如果你开发了一个小的应用程序假如说针对Nokia的某一型号的手机这时你想在别的型号Nokia机上运行该程序那么你可能需要面对一些移植工作如果你想在Motorola或是西门子又或是爱利信上运行呢这种平台间的互相独立使得你的应用绑死在某种特定的设备上这对于第三方软件开发商来说简直就是噩梦这时正是Java出马的时候对于J2ME来说由于其得天独厚的跨平台性与良好的可移植性使得其在设备繁多平台异常混乱的手机与PDA市场更显得如鱼得水我们将在后面的章节中具体介绍J2ME是如何支持众多的设备平台的J2ME技术在无线设备上的应用J2ME的历史与前景J2ME这个名词虽然是最近才提出的但是自从Java技术提出以来sun就从未停止过在小型设备应用这方面的研究从最早的90年代初的Oak计划Java的前身到1997年提出的Personal Java1998的JavaCard然后是99年的KVM计划以及J2ME这个名词的提出J2ME作为一个独立的平台逐渐成型而且还在不断的发展更新中我们会在后面的章节中介绍目前J2ME的体系结构据一些无线市场分析家预计到2004年J2ME将成为无线设备的主导开发平台今天我们可以发现全球著名的通讯设备制造商们如Motorola Nokia西门子Panasonic纷纷宣布支持J2ME 技术在美国著名的电信网络运营商如Nextel SprintPCS BT Cellnet等也热切地加入到J2ME 的研发中来在日本NTT DoCoMo推出的i-mode手机获得了极大的成功I-mode手机部分使用了J2ME技术据Sun公司统计到2001年全球已经售出了1500万台支持J2ME技术的手机到了今年2002年Java技术在移动设备上的应用更是被炒做的异常火热今天的JavaOne大会上J2ME与J2EE一道成为了十分火爆的名词根据sun的统计目前有超过200家公司发售J2ME应用程序今年全球将生产超过1台J2ME手机Nokia将生产其半数以上J2ME技术会占据移动设备领域这句话现在说似乎还为时过早但也并非是空穴来风如同前文谈到的移动设备和无线市场的特性J2ME的主要技术优势在于良好的跨平台能力与J2EE后端无缝的结合能力和Java语言的优良特色如简单安全以及现有的Java平台上的开发工具企业开发人员将会为J2ME提供良好物力与人力基础未来sun以及JCP合作厂商将进一步完善与发展J2ME技术这些工作一直都在进行中如即将被发布的MIDP NG CLDC1.1等等Java研究组织 1.2 Java版本的变迁Java的三个版本目前Java2平台已经正式划分为3个部分它们分别是J2SEJava 2 平台标准版Java 2 platform standard Edition其被使用范围最广用于我们通常使用的台式机desktopJ2EEJava 2平台企业版Java 2 Platform Enterprise Edition被广泛应用于服务器上包括JSP Servlet EJB以及目前炙手可热的Web Service等技术J2MEJava 2平台微型版Java 2 Platform Micro Edition被使用在资源受限小型消费性电子设备上如电视机顶盒无线电话掌上电脑等图1.2 Java版本的划分和针对的设备J2ME的优势移动设备PDA市场的繁荣发展造成了五花八门的厂商与品种异常广泛的设备例如两种设备也许具有相同的功能当实现的方法可能会有相当大的区别例如对PDA和手持电话来说都具有J2ME技术在无线设备上的应用显示的功能但屏幕的实际尺寸却有很大的区别支持的色深也不相同重复的开发工作以及移植的不便性使得开发成本与开发难度不断提高这就使得设备厂商要求拥有一个统一的开发平台面向这个问题Sun提出的J2ME的解决方法具有的优势有从程序员的层面看java语言简单易学而且功能强大减小学习该技术的梯度而且大量的已有的Java程序员可以平滑的过渡到J2ME 编程中来为其提供大量的人力支持从Java平台来说天生的对移植性良好的支持以及Java 平台的整体解决方案即与J2SE J2EE的协作可以建立端对端的Java解决方案J2ME与J2SE之间的关系如果J2ME可以具有Java平台的全部功能当然最好了但实际上是不可能的J2ME针对特定的目标必然要做出选择什么是应该保留的什么只好舍弃以及需要加入些什么例如J2SE中用于UI用户介面设计的AWT Abstract Window Toolkit库和Swing库就只能舍弃因为对于J2ME支持的那些资源有限的电子设备来说一般其显示屏的物理尺寸都相对较小并不适合AWT这些用于平台机的UI包而且这些设备的处理器能力和内存大小也不足以支持AWT Swing 的事件处理模式所以J2ME就定义了特有的UI包来适应这些设备1J2ME与J2SE在类库级别上的关系图1-3所示图1-3 J2ME与J2SE关系如上图所展示的可以把类库分为3类J2SE专有的类库J2SE与J2ME共有的类库J2ME专有的类库1具体来说对应于MIDP定义了javax.microedition.lcdui包.详细内容请参考本书第四章1.3 J2ME的体系结构J2ME的体系结构总体概览J2ME其作为一个可以与J2EE J2SE相提并论的平台是在1999年的JavaOne大会上提出的随着时间的推移与技术逐渐地成熟其平台本身的构架也逐渐演绎嬗变下图给出J2ME一个总体的构架请注意由于J2ME平台还在不停的发展之中下图展示的结构可能与J2ME当前最新的结构相比存在一些细小的差别图1-4 J2ME平台总体结构何谓Configuration与Profile为了使J2ME平台可以良好地支持范围广泛品种诸多的消费性电子设备以及应对不断变化渐进中的设备技术为未来应用提供可扩展的空间对J2ME平台经行模块化的设计是必不可少的因此J2ME平台的设计师们提出了两个新的概念分别为配置configuration和描述profile并以它们为核心把J2ME进行了分层化如图1-5所示图1-5 J2ME的configuration与profileConfiguration设备的配置configuration为这些设备定义了一个基本的J2ME运行环境其中包括虚拟机和核心的java类库可以把配置理解为一个针对某一族设备的最小的Java平台其中包括满足该族设备的Java VM虚拟机功能的最小子集和针对该族设备的Java类库的最小集合要注意的是configuration主要针对的是系统级的特性如基本的Java语言的特性虚拟机的特性以及系统级的java核心类库等Profile描述profile是构建在配置configuration层之上的一层类库它比configuration的针对性更强它提供configuration层中所缺失的功能以支持特定的设备这些功能包括对UI对持续性存储的支持等Profile层提供了应用程序级的接口应用程序就建立在Profile层上一个configuration可能会有好几个profile也就是说一个设备可以支持多个profile请注意profile 针对的更特定的设备从功能划分的角度来说也是如此例如针对某些移动设备可能会定义一个SMS profile以提供收发短消息的功能这种功能就只能定义在profile中而不能定义在configuration中因为短消息这种功能是只针对手机等移动设备的上文抽象的介绍了一下configuration和profile这两个概念下面具体的介绍一下J2ME中的configuration和profileJ2ME ConfigurationJ2ME 配置Configuration包括两种分别是连接设备配置CDC和连接受限设备配置CLDC正如前面提到过的配置分别针对的是某一族系的设备J2ME所支持的设备主要分为两种分别通过CDC和CLDC支持个人移动信息设备指那些可以进行间隙性网络连接的设备如移动电话双向寻呼机PDA 等这类设备从性能上来讲属于低端设备由CLDC支持共享连接信息设备指那些网络连接固定不中断的设备如电视机顶盒互联网电视可试电话等这类设备从性能上来讲属于高端设备由CDC支持CDC连接设备配置Connected Device Configuration目标设备总内存大于2MB其内存可以为RAM ROM或是Flash闪存其虚拟机支持Java2虚拟机的全部功能CDC的虚拟机被成为CVM compact VM这里需要注意的是CVM虽然在功能上支持Java2虚拟机的全部功能当并不等同与J2SE的虚拟机为了支持特定的设备CVM做了从新的设计所以从严格的意义上图1-3中CDC下方的虚拟机应写为CVM更确切但从功能的角度来讲可以把它粗略地理解为JVM CDC包含的类库与J2SE之间的包含关系如图1-6所示图1-6 CDC,CLDC与J2SE之间的关系CLDC连接受限设备配置Connected,Limited Device Configuration CLDCCLDC面向的目标设备是小型的资源有限连接受限的设备这些设备的内存在160~512KB之间处理器速度较慢通常是靠电池给设备供电并且网络连接常通表现为间歇性连接而且带宽有限CLDC为这些设备定义了一个的小型的Java平台其实作的表现就是KVM K虚拟机并允许动态的向这些设备发布内容与应用程序来方便第三方软件厂商与开发者向这些设备移植内容与应用程序CLDC提供了对基本Java语言的支持1CLDC总的来说是与Java语言完全兼容的但需注意以下几点不支持浮点数据类型2即没有float这种数据类型类库中也没有包含ng.Float 这个类之所以这样做主要是出于对CLDC所面向设备的硬件功能方面的考量如设备内存有限大部分硬件不支持浮点等不支持类实例class instance的终结finalization即不存在Object.finalize()方法有限的错误处理Error Handing即大部分ng.Error的子类都未被支持这主要是由于设备的内存的限制CLDC基于Java虚拟机规范Java VM spec3定义了专门针对于小型消费电子设备如前文所述的虚拟机实质上CLDC在其严格的内存限制下达到了对Java虚拟机相当程度的兼容性不过还是有些需要特别指出的不同点请注意下述列出了CLDC中缺失的或改变了的Java虚拟机特性不支持浮点数据类型没有float和double不支持JNI (Java Native Interface )不支持用户自定义的Java级的类载入器class loaders没有反射(reflection)4特性不支持线程组thread groups或守护线程daemon threads不支持类实例class instance的终结finalization没有弱参考weak references5有限的错误处理error handling1对java语言的支持基于Java Language Spec请参考The Java Language Specification by James Gosling,Bill Joy, and Guy L. Steele. Addison-Wesley, 1996, ISBN 0-201-63451-1.2这一点在未来的CLDC1.1 spec中将有所改变从其草案的公开讨论稿中可以看出对于浮点的支持被加了回来3对于Java VM spec请参考The Java Virtual Machine Specification by Tim Lindholm and Frank Yellin Addison-Wesley, 1996, ISBN 0-201-63452-X.4 reflection java通过ng.reflect提供的一种功能可以对类的能力进行分析常用来对类的结构进行检查在JavaBeans上有广泛运用可参见Gary Cornell的Core Java2 volumeI,II5 weak reference提供了一种解决指向已经被garbage collector清除的对象的方法在Java2中被介绍具体请参考ng.ref API 文档和sun网站上关于Reference Objects和Garbage Collection的文章改变了的Class文件审核模式class file verification CLDC中新定义了一种两步审核模式具体请参看后文根据CLDC规范sun在CLDC 参考实现CLDC reference implementation CLDC RI中实作了一个虚拟机这就是我们常说的KVM K虚拟机这个K来自英文Kilobyte KB寓意是该VM针对于内存以KB来计量单位的小型设备CLDC包含了一个基本的J2ME运行环境其中包括虚拟机和核心的java类库如果对CLDC所包含的类库进行一下考察我们就会发现由于CLDC专门针对于小型设备它对J2SE类库进行了大量的简化1其类库只保留了Java 规范中定义的最核心的3个包即java.io ng和java.util并重新定义了一个新的包javax.microedition这里你可以通过前缀来区别java.表示核心的java包javax.表示标准java扩展包CLDC与J2SE之间的关系如图1-6所示这里要注意的是在CLDC中定义的javax.microedition包为javax.microedition.io用来支持通用连接框架GCF Generic connection framework2CLDC中的包和所对应的功能如表1-1所示表1-1 CLDC所包含的包与对应的功能CLDC包对应的功能java.io 标准Java I/O包J2SE I/O包的子集ng 核心的语言包J2SE的子集java.util 实用类J2SE标准实用类的子集Javax.microedition.io CLDC的通用连接框架类和接口Javax.microedition中其他的包在MIDP中定义来支持CLDC中所没有涉及的功能如对应用程序life-cycle的管理,UI界面,Event处理,永续性存储等详见后文关于MID Profile的介绍CLDC中的类审核模式CLDC要求其底层的虚拟机能够辨别并拒绝非法的class文件但由于CLDC本身面向小内存消耗的小型设备这一前提其类文件检测机制与J2SE中定义的标准类文件审核机制有所不同CLDC 中有一步其特有的预审核preverification过程这是CLDC区别于通常的类文件审核过程的关键1这些核心的Java包也是缩了水的例如对于java.util包由J2SE的47个类缩小到CLDC的10个类2关于GCF请参考第7章MIDP网络编程如图1-7所示当程序的源程序被编译后必须被预审核器预审核然后才能生成可以被下载到目标设备上运行的类文件之所以有这一步骤主要是为了减轻目标设备上虚拟机中审核器的负担加快其审核速度所以把一部分的审核任务放在预审核器中完成请注意在CLDC/MIDP环境下开发程序其程序经过编译后必须经过预审核后才能运行图17 CLDC的类文件审核机制J2ME ProfilesFoundation profile位于CDC上层的profile是J2SE1.3功能的子集基本上涵盖了J2SE的主要功能不过没有GUI 的支持AWT与Swing包没有包括在Foundation profile中对GUI的支持可以通过Personal profile来获得Personal 和personal Basis profilePersonal profile源于sun早先的PersonalJava应用环境1Personal profile可以提供PersonalJava的全部功能如对AWT的全部支持等用于在Foundation Profile上层提供对GUI 的支持personal Basis profile相对于personal profile更小针对与设备要求更简单的GUI的场合1 Personaljava3.1,sun早先为消费性设备与嵌入式设备提供的平台使用的是JDK1.1API详细情况请参考Sun网站RMI Profile位于CDC的Foundation profile 上层的profile以支持RMI Remote Method Invoke远程方法调用MID ProfileCLDC为那些资源受限不足以支持整个J2SE虚拟机环境以及J2SE核心类库的设备提供了运行Java程序的基础然而作为一位应用程序开发者如果您只能通过CLDC提供的API来进行编程是几乎不可能的因为CLDC中并没有提供给我们与用户存储设备网络直接交互的工具CLDC 是一个基础层其上层可以架设一系列的描述(profiles)层来提供CLDC所缺失的功能每一种profile被设计成适应某种类型的设备的形式而移动信息设备描述Mobile Information Device Profile MIDP就是这些profile中的一种MIDP是位于CLDC上层的Profile是目前J2ME平台中发展相对最成熟最广为人知的Profile如同MIDP的名字所描述的其针对的是移动信息设备Mobile Information Device MID这类设备通常指手机或是PDA它们在屏幕内存处理器等硬件特性上有诸多限制所以说在MID上开发应用程序必须要考虑一些技术上的特殊点下面给出MIDP规范中定义的移动信息设备的特性显示96x54 最小屏幕尺寸色深1bit最小色深单色可能的输入设备单手键盘one-handed keyboard指ITU-T手机键盘双手键盘two-handed keyboard指标准键盘即QWERTY键盘当然大小要比PC机用的小的多触摸屏内存128kb用于MIDP组件8kb应用程序生成的永续数据Persistent data132kb Java 运行时环境Java runtime网络双向的无线的间断的带宽有限的网络设备内核至少要能运行KVM其他特性如读写non-volatile内存就是掉电后不会失去内容的内存如flash读写无线设备接口的API等等1永续数据存储会在将来讲RMS时详细说明这里有个概念就行了如前文所述MIDP定义于CLDC的上层用以提供对UI永久存储介质persistence storage和网络等更高层的相对于CLDC支持那么让我们来具体看看MIDP的类库MIDP由四个javax.microedition包组成它们包括javax.microedition.rmsjavax.microedition.midlet javax.microedition.io javax.microedition.lcdui如果在加上Java核心包即ng java.io和java.util则共有7个包MIDP中的包和所对应的功能如表1-2所示表1-2 MIDP所包含的包与对应的功能MIDP包对应的功能javax.microedition.io MIDP对网络支持javax.microedition.lcdui MIDP的UI包javax.microedition.midlet 定义了MIDlet的框架以及MIDlet与环境的交互javax.microedition.rms MIDP的RMS对永续存储介质的支持java.io 标准Java I/O包J2SE I/O包的子集ng 核心的语言包J2SE的子集java.util 实用类J2SE标准实用类的子集Pda profile位于CLDC上层的profile目标是专门用来支持PDA设备如Palm等目前还在定义中还没有参考实现RI被实作出来根据其草案其目标之一是集成CLDC的MIDP和CDC的Personal Profile各自一部分的功能如PDAP中会提供AWT的支持第二章CLDC/MIDP编程概述2.1 J2ME的CLDC/MIDP软件体系架构目前J2ME平台主要分为两大体系一是基于CDC的CVM\CDC\Foundation profile体系该架构针对于内存需求相对较大于CLDC相比一般大于等于2MB处理器能力较强的设备如电视机顶盒等另外一种是基于CLDC的KVM\CLDC\MIDP体系该架构针对于小内存160 512KB,资源受限的小型设备如手机PDA等目前J2ME发展较为成熟的是CLDC/MIDP体系这也是本文所要讨论的范围J2ME的CLDC/MIDP的软件体系架构如图1-7所示图2-1 J2ME的CLDC/MIDP软件体系架构图2-1展示了CLDC/MIDP的软件体系架构和MIDP在软件体系中的逻辑位置在MIDP的上层的应用程序被称为MIDlet这些MIDlet在底层CLDC的支持下通过MIDP中提供的包获得更多的功能其中包括UI网络永续性存储等如图1-7所示MIDlet可以直接使用MIDP 本身提供的类库以及MIDP从CLDC中继承的那部分API MIDlet本身并不能直接访问其底层设备的操作系统并且也不可能做到这一点除非你的版本是移植到特定设备平台上的OEM特有的应用程序也可以称其为OEM特有的MIDlet可以通过某设备厂商提供的专用的类库来获得更多额外的功能例如Motorola和siemans其无线开发包中都有其附加的库以提供其设备特有的一些功能其中有些可能访问了底层设备的操作系统因为KVM不支持JNI java native interface, 所以要使MIDlet访问本地平台功能的唯一的办法是把本地代码链接到一个客户自定义的虚拟机上这里请注意可以支持CLDC/MIDP的VM并不是只有KVM一种只不过KVM是sun对CLDC/MIDP 的一个参考实现而已如同MIDP规范中指出的设备厂商应该把参考实现移植到其设备的硬件平台上这时厂商可能需要添加一些特有的代码来填补参考实现与特定设备之间的区别或是增加一些特有的功能厂商完全可以自定义自己的VM而且设备厂商一般都会这样做而且也有一些软件制造商专门制作VM例如IBM的J9 VM等2.2 MIDlet及其运行机制在前面一节中我们介绍了CLDC/MIDP的软件体系结构,也给出的MIDlet的概念在MID设备上运行的Java程序被称为MIDlet这种命名的方法如同我们熟悉的Applet下面将深入讨论一些MIDlet所涉及的内容MIDlet与通常的Java程序相比MIDlet有比较大的不同从某种意义上来说MIDlet更类似与Applet简而言之与J2SE程序相比MIDlet没有main()这个程序初始入口点同时MIDlet 也不能调用Runtime.exit()和System.exit()方法来中止虚拟机的运行如果调用的话将会抛出SecurityException异常MIDlet是在MID设备上运行的Java程序每一个MIDlet必须派生自抽象类javax.microedition.midlet.MIDlet MIDlet的继承体系如图2-2所示:图2-2 MIDlet的继承体系下面给出一个具体的MIDlet示例,如示例2-1所示示例2-1 一个简单的MIDlet//HelloWorld.java,一个最简单的MIDlet程序import javax.microedition.midlet.*;import javax.microedition.lcdui.*;public class HelloWorld extends MIDlet implements CommandListener {private Command exitCommand;private TextBox tb;public HelloWorld(){exitCommand =new Command("Exit",Command.EXIT,1);tb =new TextBox("Hello MIDlet","Hello,World!",15,0);tb.addCommand(exitCommand);tb.setCommandListener(this);}protected void startApp(){Display.getDisplay(this).setCurrent(tb);}protected void pauseApp(){}protected void destroyApp(boolean u){}public void commandAction(Command c,Displayable d){if (c ==exitCommand){destroyApp(false);notifyDestroyed();}}}HelloWorld.java编译后将生成一个简单的MIDlet该MIDlet可以在设备屏幕上显示HelloWorld字符串程序本身非常简单如果你熟悉JavaApplet编程的话你会发现与Applet 很类似想要编译该程序需要JDK1.3和Sun的MIDP包或是JDK1.3和Sun Wireless ToolKit 1.0.3具体编译步骤和方法请参考相关软件的说明1如果使用J2ME Wireless Toolkit MIDlet在模拟器中的显示如图2-3所示1相关软件可以在sun网站下载:/j2me/midp。
J2me存储和连接详解
2
字节数组
间主要交互的各个组件。
3
字节数组
J2ME 101,第 2 部分:介绍 MIDP 的低层 UI (2003 年 12 月)介
绍 创 建 和 使 用 Canvas 和
Graphics 类的基础知识,并概述
...
...
了 MIDP 2.0 中 引 入 的 Game
惟一行标识是一个整型值。第一个条目的 ID 为 1,然 API。
作为 J2ME 101 教程系列的补充系列两篇文章中的第一篇,本文将向您介绍 MIDP 持久存
储系统的内部工作原理。我们将从 RMS 的概览开始,不过大部分内容(如同教程系列一样)
更倾向于实际应用。并且,我们将会构建一些 MIDlet,帮助您了解如何从 RMS 中读取和
写入数据记录,并了解这个功能非常全面而紧凑的数据管理系统的各种排序、搜索和检索选
boolean createIfNecessary) RecordStore openRecordStore(String recordStoreName,
boolean createIfNecessary, int authmode, boolean writable) RecordStore openRecordStore(String recordStoreName, String vendorName, String suiteName)
项。
注意,本文假设您熟悉 J2ME 环境中的 MIDlet 开发。为了编译代码示例,系统上需要安装
J2ME 开发环境。请参阅 参考资料部分,其中有 J2ME Wireless Toolkit(WTK)安装指南的
超链接。
MIDP 中的记录管理
简单地说,MIDP 记录管理系统(RMS)提供了一种跨多个 MIDlet 调用持久性地存储应用
J2ME经典
J2ME开发入门唉,本来想写一个长一些的文章,但越写越乱,算了,就写了一点点体会,大家凑合着看吧J2ME开发的一些体会J2ME方面开发的资料,确实是少之又少,一般给新手推荐的都是王森先生的《PDA与手机开发入门》一书,然而该书其实并不适合新人阅读,该书的前几章花了很大篇幅来讲解命令行调试J2ME程序的方法和很多要点,其实这些东西,作为一个初级的J2ME开发者来说,完全没有必要学习和掌握,反而只会给自己平添很多负担。
现在做J2ME开发,大多都有了IDE(集成开发环境),比如JB,Eclipse 什么的,就算是用最简单的WTK,也不需要进行path的配置等操作,所以初学者完全可以跳过这些内容,直接上手。
我的认为,做程序开发,重在实践经验,而不是理论研究,因此,新人完全可以直接从J2ME 的程序流程入手,直接进入,而不需要去了解太多基本概念,比如什么是API,什么是MIDP,什么是JDK等等。
这些东西我到现在也不是很清楚,但并不影响我进行开发,我是讲究实用主义的,因此,本文的基调就在于讲述一些实用的开发方法。
另外首先要声明:本文中的一切开发调试都是在WTK环境下进行的,请读者注意。
一.学习J2ME需要的基础知识J2ME本身是Java语言的一部分,因此,对Java语言有一定了解是必要的,而Java语言本身是面向对象编程的一种语言,因此,对类与对象的概念要有必要的了解,而这些内容在本文中就不进行介绍了。
另外,本文行文中对API的介绍很简略,因此,读者应该自己多查阅API中的相关内容。
二.J2ME开发环境简介J2ME的开发环境如前文所述,目前主要有JB,Eclipse,WTK三种方式,其中前面两者都是集成开发环境,在编程上比较方便,有智能联想等功能,而WTK相对只提供了手动编译和打包,并且没有Debug 功能。
但WTK不需要多余的配置,对各种模拟器可以说是即插即用,而且在WTK下的程序目录简洁明了,方便查询。
毕业论文-列车时刻表及车票查询系统
编号:毕业设计(论文)说明书题目:J2ME应用开发—列车时刻表及车票查询系统院(系):计算机系专业:计算机科学与技术学生姓名:学号:指导教师单位:计算机系指导教师:职称:副教授题目类型:工程设计软件开发摘要无线通信和网络在我们的社会中扮演着一个非常重要的角色。
特别是移动电话已经变成了我们生活中必不可少的一部分。
但是,移动电话只能在有限的硬件资源上运行。
针对这个特点,出现了J2ME技术。
J2ME是Sun公司针对只有有限的硬件资源的机器,例如:PDA,移动电话,和其它消费的电子和嵌入式的设备而设计的Java版本。
这些设备的典型特征是有限的处理速率和内存。
虽然这些设备的性能正在被提高,但是它们还不具备服务器甚至是台式机系统的性能。
这些设备与PC机的区别不仅仅是速度和处理能力。
还有它们的交互性。
它们之中有一些是无线的。
一般来说,这些设备的网络连接占有低的带宽,因此只支持低的数据率并被它的小尺寸所拘泥。
这些限制不能只通过一条规则去应用于所有的设备。
事实上,每一种这种设备都有它自己特定的属性,它们要用不同的方式进行编程。
J2ME是一种灵活的解决方法。
使用J2ME能够编写任何程序。
如果有支持J2ME的手机,就可以通过网络和计算机下载各种java程序。
所以在这次的设计中,我将采用J2ME技术去实现一个列车时刻和车票信息的查询系统。
在客户端,使用MIDP 1.0设计界面,有6个查询模块。
在服务器端,使用Tomcat 5.0。
客户端和服务器端的通信使用的是标准的HTTP协议。
当进入了查询系统,就可以输入查询信息。
例如:中转站信息,列车名称信息,始发站信息和终点站信息。
当输入完以后,就会接收到查询系统所找到的信息。
信息发送自远端的服务器并通过中国移动公司的无线网关进行传输。
这样,人们可以随时得到所需要的信息。
查询系统设计的目的就是为了使人们的工作和生活更加方便。
关键词:无线通信;J2ME; MIDP 1.0; Tomcat 5.0; 信息;协议;数据率;AbstractWireless Communications and Networks play a very important role in our society. Especially, mobile telephones have already been a necessary part of our lives. but mobile telephones only can run with limited hardware resources. So to aim at this characteristic, it appear J2ME technology. Java 2 Micro Edition (J2ME) is Sun's version of Java aimed at machines with limited hardware resources such as PDAs, mobile telephones, and other consumer electronic and embedded devices. These devices are typically characterized by limited processing speed and memory. Although their capabilities are being improved,at present they do not have the power of a server or even a desktop system.These devices differ from PCs not merely with regard to speed and processing power. It is not mandatory that they are interactive. Some of them may be wireless. Generally the network to which devices are connected possess low bandwidths hence support low data rates and are constrained by their small size.These limitations do not apply to all of them as a rule.In fact each of these devices has its own specific attributes,which demand that each of them has to be programmed in a different way.J2ME is a flexible solution. If use j2me ,any programs can be wrote. if there is the telephone that support Java 2 Micro Edition, it is possible to download various Java programs with these telephones via Network or computers. so,in this design I am going to use J2ME technology to realize an search system for train’s time and ticket information. In the client, interface is designed using MIDP 1.0 and there are 6 search module. In the server,it’s used by Tomcat 5.0 .The Communication between the client and the server uses the standard HTTP protocol. When someone enter into the search system,he can input search informations. For example, transfer station information, train’s name information,start station information and end station information. After input, there are receiveed informations which the search system find. It sends from the remote server and transmit through the Wireless gateway of China Mobile company. In this way,people can get the informations which they require at any moment. The design purpose of the search system is that make people’s work and lives convenient.Key words:Wireless Communications;J2ME; MIDP 1.0; Tomcat 5.0; information; protocol; data rate;目录引言- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 1 概述- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -11.1 背景及意义- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 1.1.1可定制的个人服务- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 1.1.2 J2ME 平台- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2 1.1.3 J2ME的配置和框架- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 2 1.1.4 CLDC技术- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 4 1.1.5 KVM - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 4 1.1.6 分布式三层架构- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 4 1.2 毕业设计要求- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 4 1.2.1需要熟悉的开发的工具,流程和方法- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 4 1.2.2要求实现的功能和处理数据- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 1.3 所用关键技术介绍- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 1.3.1Servlet技术- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 5 1.3.2JAVA的多线程技术- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6 1.3.3 手机和Servlet通信- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 61.3.4JDBC接口技术- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 72 需求分析- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -72.1 引言- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 7 2.2 系统简介- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 7 2.3 网络环境与硬件需求- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -8 2.4 流程详细设计- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 9 2.5 模块详细设计- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -9 2.6 开发环境及硬件要求- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -16 2.6.1操作系统选择- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 16 2.6.2安装Java 2 SDK - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 16 2.6.3安装Motorola SDK - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 16 2.6.4配置编程软件- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 16 2.6.5 Tomcat5.0 应用服务器的配置- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 18 2.6.6数据库系统选择- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 21 2.7 完成系统功能所采用的技术和开发工具- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 21 2.7.1 MIDlet的生命周期- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 21 2.7.2 MIDP UI设计- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 22 2.7.3开发servlet - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 23 2.7.4使用MIDlet与servlet进行通讯- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 24 2.7.5不配置ODBC数据源,用JDBC-ODBC桥连接Access数据库- - - - - - - - - - - - - - - - - - - - - - - 27 2.7.6 java多线程- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 27 2.7.7中断JAVA线程- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 283 系统设计- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -293.1 概念结构设计- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -29 3.2 逻辑结构设计- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -303.3 物理结构设计- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -30 3.4 数据库详细设计- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 314 系统实现- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 335 系统测试与分析- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -395.1 测试的环境- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 39 5.2 测试步骤- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 39 5.3 测试结果- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 406 结论- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -40谢辞- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 41参考文献- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 42附录- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 43引言目前,可连接的私人智能信息设备在我们的工作和生活中正起着越来越重要的作用。
J2ME开发环境的安装及配置
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中应用程序的内存优化
J2ME 中应用程序的内存优化一.代码优化内存会溢出肯定和代码逃不了关系,99.99%学java 的人都知道垃圾回收器是java 的一大优点并据此来嘲笑C++。
显然这个特性为代码编写者省了不少事,但这个特性却带来了不少隐患。
举个例子在游戏当中经常有不同场景的切换,如从游戏逻辑退到主菜单逻辑,对游戏逻辑对象的态度很多人会选择忘记等待垃圾回收器来收尸。
乍看之下似乎并无不妥垃圾回收器会来善后。
实际上垃圾回收器并非实时的,它不像C++的Delete 语句马上释放不用的内存。
当从游戏逻辑切换到主菜单逻辑这时两个对象同时存在很可能这时内存就不够用了。
读到这里很多人会发现实际上垃圾回收器在j2me 上并不怎么好用,从一个角度上来讲在j2me 上所有垃圾必须由手工释放,除简单类型以外所有对象都必须显式地置空例如imgs=null; 实际上java 提供了一个不错的工具用来查找内存溢出,ng.Runtime.freeMemory()。
它可以返回当前的剩余内存数,将它适当的安放在代码中可以有效的监测内存使用状况。
很大一部份的j2me 程序员之前都是从事pc 软件开发工作,充裕的内存掩盖了许多写代码的不良习惯。
如下所示://a 不为空a=newLogic(); 很多人可能对此有异议,他们会认为新的对象会把旧的对象冲掉并且释放内存。
这里面包含两个问题:1.该段代码是先创建对象然后再进行赋值操作的,也就是说在这期间有两个对象同时存在这就很可能会产生溢出。
2.这样做也会妨碍垃圾回收器的工作较好的写法如下:a=null; a=newLogic(); 虽然麻烦了点但在j2me 中还是必要的。
接着看下例。
drawString(游戏时间:+time,50,50,Graphics.LEFT|Graphics.TOP); 游戏时间:+time 很完美在paint() 方法当中每次都被刷一遍显示在屏幕上。
危机往往隐藏在美丽的外表,该语句会引起新的内存重新分配来存储游戏时间:+time 而显示完以后又必须由垃圾回收器释放,用了双倍时间,并且容易发生内存溢出。
J2ME应用程序性能优化的探讨
第25卷第1期 计算机应用与软件Vol 125No .12008年1月 Computer App licati ons and Soft w are Jan .2008收稿日期:2006-03-27。
楚军华,硕士生,主研领域:移动信息管理系统应用。
J2M E 应用程序性能优化的探讨楚军华 李治柱(上海交通大学电子信息和电气工程学院 上海200030)摘 要 涉及如何通过现有的技术手段来提高J2ME 应用程序的性能。
分析和论述了性能优化的原则以及性能瓶颈的定位方法等诸多方面,并提出了两种比较具体且有效的代码优化方式。
关键词 J2M E 移动应用系统 性能优化D I SCUSS I O N O F J 2ME APPL I CAT I O N PERFO R M ANCE O PT I M I ZAT I O NChu Junhua L i Zhizhu(School of Electronic Infor m ation and Electrical Engineering,Shanghai J iaotong U niversity,Shanghai 200030,China )Abstract D iscussi on is made on the perf or mance enhance ment of the J2ME app licati on thr ough the existing technical method .The p rinci 2p le of perfor mance op ti m izati on is analyzed,and the l ocalizati on method for perfor mance bottleneck is discussed .T wo s pecific and effective ways for code op ti m izati on are p resented .Keywords J2ME Mobile app licati on syste m Perfor mance op ti m izati on0 引 言基于J2M E 的移动应用系统遇到的主要问题是可以存储和运行J2ME 程序的设备所具备的内存等资源很有限,导致系统功能受到很大限制。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
J2ME内存优化
[ 录入者:admin | 时间:2006-05-07 21:32:40 | 作者: | 来源: | 点击数:310 ]
[上一篇] [下一篇]
内存优化可以归结为以下几种方法。
代码优化,图片优化,第三方工具优化等…
一.代码优化
内存会溢出肯定和代码逃不了关系,99.99%学java的人都知道垃圾回收器是java的一大优点并据此来嘲笑C++。
显然这个特性为代码编写者省了不少事,但这个特性却带来了不少隐患。
举个例子在游戏当中经常有不同场景的切换,如从游戏逻辑退到主菜单逻辑,对游戏逻辑对象的态度很多人会选择忘记等待垃圾回收器来收尸^_^。
乍看之下似乎并无不妥垃圾回收器会来善后。
实际上垃圾回收器并非实时的,它不像C++的Delete语句马上释放不用的内存。
当从游戏逻辑切换到主菜单逻辑这时两个对象同时存在很可能这时内存就不够用了。
读到这里很多人会发现实际上垃圾回收器在j2me上并不怎么好用,从一个角度上来讲在
j2me上所有垃圾必须由手工释放,除简单类型以外所有对象都必须显式地置空例如 imgs=null; 实际上java提供了一个不错的工具用来查找内存溢出,ng.Runtime.freeMemory() 。
它可以返回当前的剩余内存数,将它适当的安放在代码中可以有效的监测内存使用状况。
很大一部份的j2me程序员之前都是从事pc软件开发工作,充裕的内存掩盖了许多写代码的不良习惯。
如下所示:
//a 不为空
a=new Logic();
很多人可能对此有异议,他们会认为新的对象会把旧的对象冲掉并且释放内存。
这里面包含两个问题:1. 该段代码是先创建对象然后再进行赋值操作的,也就是说在这期间有两个对象同时存在这就很可能会产生溢出。
2. 这样做也会妨碍垃圾回收器的工作。
较好的写法如下:
a=null;
a=new Logic();
虽然麻烦了点但在j2me中还是必要的。
接着看下例。
drawString("游戏时间:" + time ,50,50,Graphics.LEFT|Graphics.TOP);
"游戏时间:" + time 很完美在paint()方法当中每次都被刷一遍显示在屏幕上。
危机往往隐藏在美丽的外表,该语句会引起新的内存重新分配来存储 "游戏时间:" + time 而显示完以后又必须由垃圾回收器释放,用了双倍时间,并且容易发生内存溢出。
依此类推在重复执行的方法里应尽量避免重复定义对象。
与paint()方法类似在循环里也有类似的情况存在。
把所有对象的初始化放在构造函数里想必是再正当不过了,大多数人通常的做法是把当前逻辑所要用
到的资源通通初始化完毕。
很大一部份的内存溢出都是发生在构造函数中。
内存使用的高峰期都是在构造函数中所以避开这个高峰能有效的防止溢出。
建议最好的办法是第一次使用时初始化。
如下所示:
if (img==null){
//初始化
}
现在做游戏很多时候都需要地图数组,声音数组,还有一些其它资源这些资源很多可以放在代码中也有的可以放在文件当中。
强烈建议将这些资源放在文件中需要时在load进来。
这些资源文件如果放在代码中则会占用不小的代码段空间,而代码一般是程序一运行就装载到内存当中。
除上面列举的方法外还有一些大家所熟知的顺便一提, 比如关闭没用的rms ,关闭没用的网络连接,关闭没用的流。
正确地停止线程。
良好的程序架构减少代码偶合性也是一个不错的方法,无论在代码调式,内存释放都可以做到非常清析。
二. 图片优化
J2ME的内存杀手无疑非图片莫属,一张3k的图片可以占用20多k的内存不信大家把load前后的内存剩余打印出来对比看看。
所以防止内存溢出最直接的办法就是从图片入手。
1.图片压缩: 多数人马上会想到这个办法。
不错这个办法是最有效的。
在photoshop里图片制作完成后不要选择 "存储为",而是选择 "存储为 web 所用格式" 可以根据里面的选项进行压缩,特别是颜色这一项越小越好不过相应的图像会有所失真。
不要认为这样就完了。
实际上该图片还可以再次压缩,在网上有许多类似的工具。
推荐一款可以压缩png格式的软件 Image Optimizer 效果不错。
经常都有 70% 的压缩率且图像不会失真。
假如你有多张规格一样的图片,那么建议你把它做成一张长条图片。
有两个原因:
1、这样节省存储空间和内存空间。
大家可做个试验将10张图片的内容放在一张当中对比看看文件大小有没有变化。
2、10张图片需要10个image 对象需要进行10次io操作浪费时间不说还浪费内存。
当笔者发现这个好处时兴奋地把所有图片都存成一张,吱地一声内存又溢出了...原因想必大家也知道!!图片太大了不要把不同界面的图片整合在一起否则经常会得不偿失。
作图时还有一些细节需要注意,颜色数量,分辩率,图像模式(最好是索引颜色),画布大小都会影响到图片大小。
三.工具优化
谁都知道混淆器是用来保护代码的以加大反编译的难度(个人认为这是在嘲笑程序员的智商)。
实际上用它来优化程序也是不错的选择,至少有两点好处:1、压缩程序大小。
一个60k的程序经常可以压掉10k 左右。
10k的空间对于写低端手机的程序员简直是雪中送碳,多少超过64k限制的游戏都受过它的恩惠;2、节省内存空间。
用脚去想也想得出来代码少了内存里的代码段自然就短了。