J2ME

2024-08-26

J2ME(精选9篇)

J2ME 篇1

随着移动通讯技术的快速发展,手机除了用来打电话,发短信外,也提供音乐播放,视频播放,手机游戏等服务功能。手机上使用的这些软件一般都是在PC机的模拟器上进行开发和测试,实际上这些软件在不同型号的手机上运行效果是不太一样的,甚至是不能正常运行,这些情况一般是手机硬件环境的不同造成的,例如屏幕的大小、内存的大小等等。但是即使是在硬件环境完全相同的情况下,也有可能因为开发者的原因造成软件无法正常运行或者运行效果不佳,例如内存异常,画面不连续等,因此在移动开发中对程序进行优化是很有必要的。

1 优化思路

本文从代码优化和文件优化两个方面给出常见的优化方法。代码优化主要集中在基本语法的应用上,从代码上着手解决内存不足或者运行效果不佳的问题。文件优化主要集中在资源文件的使用方法以及如何节约存储资源上,解决存储空间不足的问题。

2 代码优化

2.1 乘除运算优化

2.1.1 位移运算

位移运算要比乘法和除法运算要快,对2的幂的乘除运算可以用位移运算代替。如int cellX=(cellX+cellWidth)/2可以优化为int cellX=(cellX+cellWidth)>>1。

2.1.2 除法运算

乘法运算要比除法运算块,如果有可能将除法转化为乘法来进行。如double x=n/5可以优化为double x=n*0.2。

2.2 成员变量优化

2.2.1 局部变量

局部变量的访问速度要比成员变量的访问速度快,如果在循环中频繁的访问成员变量可以利用局部变量来中转以提高访问速度。如:类中有private的int类型成员sum

for(int i=1;i<=100;i++)

sum+=i;

可以优化为

int temp=0;

for(int i=1;i<=100;i++)

temp+=i;

sum+=temp;

2.2.2 成员变量

为了成员变量的安全性,我们一般会将成员变量设为private的,对成员变量的访问通过public的方法来完成,但这种访问方式比直接访问成员变量要慢,如果安全性有保障,可以直接将成员变量声明为public。

2.3 字符串优化

String类型的字符串是不可变的,该类型的字符串的修改会引起内存的开销,可以使用StringBuffer来代替,如String str="当前位置:"+spriteX可以优化为String str=new StringBuffer("当前位置:").append(spriteX).toString()。

2.4 集合优化

如果程序中有对象需要临时存放,一般可以采用集合来存放(例如Vector,List),但是集合会比固定大小的数组花费更多的内存,因此如果要存放的对象个数确定的话,我们可以直接采用固定大小的数组来存放。

2.5 循环优化

循环是最有可能优化的地方,因为循环的代码会多次重复出现,很可能一个小的失误带来巨大的内存开销,因此尽可能的将代码放在循环外面执行。如:

以上代码出现在一个GameCanvas的子类中,目的是为了重新绘制屏幕。其中第一句是为了获得当前类的Graphics,对于该类运行的手机环境来讲,Graphics是不会变化的,如果每次都调用getGraphics()会降低运行效率,可以将此句放到循环外面完成。第四句中出现同样的问题,getWidth(),getHeight()是用来获取屏幕的大小,屏幕的大小在运行过程中是不会改变的,因此可以在进入循环之前先获取到屏幕的大小。以上代码可优化为如下代码:

2.6 垃圾优化

Java的垃圾回收机制可以让程序员不再花费大量时间处理程序中出现的垃圾,但该机制回收垃圾并不是很及时,我们可以主动告诉虚拟机哪些东西是垃圾,以加快垃圾的回收。处理方法:不用的对象赋值null。

2.7 构造方法优化

很大一部分的内存溢出都是发生在构造函数中,尽可能避开在构造方法中使用内存。例如对象的初始化可以在使用的时候才初始化。如:

3 文件优化

3.1 资源文件优化

代码一般是在程序开始运行时就调入内存,将程序运行过程中要用到的资源放在另外的文件中存放,需要用的时候才载入,以避免程序启动时内存溢出。

3.2 文件整合优化

手机游戏程序中常常需要较多的图片资源,如果每张图片都是一个文件不仅读取的时候浪费时间还会浪费一些内存,可以将多张图片放在同一个文件中存放,使用的时候再从大图片中分割出需要的部分。此方法慎用,如果整合后的图片太大,可能在读入该图片时直接导致内存崩溃。

3.3 文件大小优化

3.3.1 文件格式优化

选择合适的文件格式,以减小文件大小,如png格式图片,文件相对会小些。

3.3.2 class文件优化

在程序中生成尽可能少的class文件,class文件会消耗一些存储空间。

3.3.3 使用混淆器

用混淆器处理类文件,可以减小文件大小。

4 结束语

本文给出了一些J2ME移动开发中常见的优化方法,多数情况下利用上述优化方法优化后的代码,执行效率有明显的提高,内存溢出情况也有所改善。在实际应用中对程序的优化一定要权衡一下是否必须优化,因为优化可能会带来诸如增加BUG,降低代码的可读性,降低代码的移植性等不良效果。

参考文献

[1]林巧民.Java程序设计教程[M].北京:清华大学出版社,2008.

[2]王国辉.Java Web开发实战宝典[M].北京:清华大学出版社,2010.

[3]郭克华.Java ME移动开发实例精讲[M].北京:清华大学出版社,2010.

J2ME 篇2

[ 录入者:j2me | 时间:2006-04-18 14:03:04 | 作者: |来源: | 点击数:245 ]

[上一篇] [下一篇]

J2me程序由于其特殊的运行环境限制,所以优化就显得比较重要,以下是我在学习j2me编程所收集的一些技巧和自己的心得。

本文主要是说明j2me平台上的特殊优化方法,与j2se重复的一些技巧就不再赘述了。

1.显示图象时确定好你的fps,最好先做几次小实验,这样能让你在显示效果和运行速度上有比较好的平衡。

2.GamaCanvas.getGraphics()每次都会产生一个全新的对象,但是对这些对象的操作都是对同一个graphics,所以还是只取一次供后面使用。

3.让多个对象使用同样的监听器,比如让主MIDlet类实现CommandListener和ItemStateListener接口。

4.考虑使用手机开发商提供的一些sdk,没人会比他们更了解他们手机,所以有些时候能显著提高速度,特别是图片,视频使用方面。

5.使用监视工具分析MIDlet的瓶颈,wtk和各个公司提供的开发包里都会有,可以找到程序的弱点。如果是在手机上,用timer测试你认为有可以的地方。

6.使用System.gc(),在无线程阻塞的情况下可以有效的缓解内存压力,但是有些公司不是太推荐使用(如nokia).sun的说法也是越低端的机子执行的越慢,总之,慎用吧。

7.用固定的数组代替使用Vector。

8.图片的优化。考虑使用设备的规格,可能高分辨率的图片不一定显示的出来。

9.不用的对象赋值为null,为更快的回收

更多精彩请关注

更多精彩请关注

更多精彩请关注

J2ME 篇3

[关键词]J2ME XML 数字签名

一、引言

基于Java的Web服务和无线Java开发是JavaOne的两个最突出的主题。它们代表普及计算领域中未来的后端和前端Java技术。

Java 平台可以在无线 Web 服务应用程序开发中扮演几个重要角色。在无线端,Java 2 Micro Edition(J2ME)为所有无线设备(从蜂窝电话到复杂的家用无线信息家电)提供了跨设备的兼容性、高级语言功能和大量库。J2ME的一个关键组件是移动信息设备框架(Mobile Information Device Profile:MIDP),它在蜂窝电话和低端PDA上定义Java API和运行时环境。由于庞大数量的低端设备,期望在将来能够广泛部署MIDP。

从Web服务端,Java2Enterprise Edition(J2EE)已经具有所有必需的API和库存处理Web服务XML消息。通过Web服务接口或网关,可以方便地将用 EJB技术实现的核心J2EE功能、JDBC API和RMI API用于外部世界。为了将这些特性集合起来并启用无线Web服务应用程序,还提出了J2MEWeb服务规范,目前它应用在JavaCommunityProcess中。

虽然无线Web服务在普及移动商业世界中应用广泛,但当前技术仍不成熟。安全性仍是剩下待解决的问题之一。本文将讨论一种常用的安全性技术——数字签名,研究如何在 XML 消息中使用数字签名来保证端对端的数据完整性,以及在当前 MIDP 设备上使用数字签名的可行性。

二、使用数字签名保证数据完整性

数据完整性是通信安全性的最重要方面之一。数据通信在无线因特网上特别容易受到攻击,而一种及时出现的援救工具是公钥基础设施(Public Key Infrastructure:PKI)和数字签名。在 PKI 数字签名模式中,每一方都有两个密码术密钥:公钥可以被任何人使用;而私钥是保密的,只有某个人本身可以使用。用私钥加密的消息只能由相应的公钥正确解密。当发送方发送消息时,他可以将相同消息的私钥加密版及他的公钥与该消息一起发送。接收方使用发送方的公钥来解密加密版本。如果它与明文消息匹配,那么接收方可以知道该消息确实可信。该消息的私钥加密版用作完整性验证记号,我们将它称为“数字签名”。

因为原始消息可能相当长,而且生成和验证数字签名的公钥算法计算复杂度是指数级的,所以发送方通常计算称为“摘要”的原始消息的短版本并且仅对该版本进行数字形式的签署。摘要具有固定长度,它是任何长度的输入消息的单向散列;其计算速度非常快。接收方首先验证接收的消息是否产生正确摘要。如果该摘要不匹配,则在执行任何公钥算法之前拒绝该消息。这可以有助于防止攻击造成堵塞,在这种攻击中,攻击者通过用伪造的公钥请求填斥服务器,以耗尽它的计算资源。

在大多数实际应用程序中,公钥本身由可信的权威部门进行数字签名,并成为“数字证书”来验证发送方的标识。不过,数字证书的处理不在本文范围内,所以在下列示例中,将假设发送方是可信的并使用未签署的公钥来说明方法。

三、对XML进行数字签名

XML正成为Web服务世界中一个主要的数据交换协议。驱动 Web服务的XML消息在到达目的地之前,通常需要经过多个中间环节。因此,保护从端到端的通信内容是重要的。完成这一任务的最好方法是,将XML文档及其安全性信息(如签名、摘要和密钥等等)都装运在一起,作为单个文档。

XML数字签名是将数字签名添加到XML文档的W3C规范。发送方可以选择对整个文档或者仅它的一部分进行数字签名。数字签名、摘要和公钥被格式化成XML元素。那些安全性信息的额外元素可以封装整个原始XML消息,或者可以将它们嵌入原始消息。为方便起见,将在本文中使用封装格式。另外,将密钥分成几个参数并将那些参数传递到公钥元素KeyInfo下的单独XML元素中,以代替使用编码的公钥证书。这在密钥和处理它们的Java代码之间建立了更明显的连接。

四、使用Bouncy Castle Crypto API进行数字签名和验证的完整实现步骤

由于篇幅有限,本文将简略地论述XML数字签名规范,以及Bouncy Castle密钥生成器、编码引擎、数字签名签名引擎和摘要引擎的用法。Bouncy Castle是一种用于 Java 平台的开放源码的轻量级密码术包。它支持大量的密码术算法,并提供JCE 1.2.1的实现。因为 Bouncy Castle 被设计成轻量级的,所以它都可以在从J2SE 1.4到J2ME的各平台运行。它是在MIDP上运行的惟一完整的密码术包。

Bouncy Castle Crypto API对J2ME应用程序中XML文档进行数字签名和验证的完整实现过程,如步骤图所示:

五、具体实现代码分析

Bouncy Castle Crypto包提供几个使用DSA、RSA 和 ECC算法的签名引擎类来签署和验证消息。本文将详细讨论如何使用RSA 签名引擎来签署并验证数字签名。那些签名引擎使用不同的算法和不同的密钥,并且需要不同的参数。本文还将讨论如何将安全性信息(签名、摘要和公钥)嵌入XML文档,以及比较三个签名引擎并提出今后的改进建议。

在上述生成“随机的密钥对”代码中,RSASigUtil.generateKeys()方法使用 Exponent 生成随机的密钥对,这个步骤通常由中央认证中心在脱机状态下完成。公钥以参数 Modulus 来描述,并且用 pubKey.getModulus() 方法来检索它。下面的代码说明了 RSAUtil 类中的方法。这些方法检索 Exponent 和 Modulus模型及密钥参数,它们是重新构造公钥对象所必需的。

通过使用生成的私钥,实用程序类 RSASigUtil 可以从摘要获取一个字节数组 RSA 签名:

服务器将摘要、签名和密钥参数编码成ASCII文本格式并以XML数字签名格式嵌入该文本:

验证MIDP应用程序从 XML 文档解析出摘要、密钥参数和签名,重新构造公钥并使用下列方法来验证签名:

以上测试说明了无线设备上的 XML 解析和摘要生成都非常快。其主要的性能瓶颈是公钥算法的速度很慢。Bouncy Castle Crypto 包提供几个使用 DSA、RSA 和 ECC 算法的签名引擎类来签署和验证消息。但在实际设备中,它们并不都是实用的,因为 Bouncy Castle Crypto 包完全基于Java 语言,所以它在没有特殊优化的情况下依靠很慢的 JVM 来执行甚至是最密集的大整数数学运算。结果只有 RSA 算法提供了一个合理的性能,而且是可以接受的。它只要花很少的时间就可以在16MHz Palm VII 设备上验证具有1024位公钥的简单数字签名。虽然如此,验证进程在任何实际的应用程序中还是必须作为后台线程运行,以避免用户界面锁定。

DSA和ECC算法性能在其当前实现中是不可接受的。具有 1024位密钥的DSA签名和具有192位密钥的ECC签名要花大量时间在标准的Palm VII MIDP上进行验证。性能问题强烈需要我们需要为大整数数学运算和公钥算法对JVM 进行优化。JVM 还必须利用可用的特殊硬件和底层的OS功能来促进与安全性相关的数学运算。公钥算法用于安全连接(如 HTTPS)中的信息交换。许多当前的 MIDP VM 可以用合理的性能来支持 HTTPS 协议。MIDP4Palm VM 可以利用 Palm OS 的底层的 inethttps 协议来建立安全连接。可以想象未来的VM和核心语言库不仅优化与安全连接相关的公钥操作,而且还使优化可用于一般安全性功能(如数字签名)。

六、结束语

在 Bouncy Castle 提供的所有算法中,只有 RSA 算法提供了无线设备上可以接受的性能。然而,未来在 MIDP 运行环境上的进步可以使数字签名更易于移动用户使用。

参考文献:

[1] Alfred J. Menezes、Paul C. Van Oorschot、Scott A. Vanstone. Handbook of Applied Cryptography[M]. CRC Press. 1996

[2]http://www.w3.org/TR/xmldsig-core/ XML-Signature Syntax and Processing. W3C 2002

J2ME平台体系结构分析 篇4

随着移动终端设备的不断普及, 巨大的商机促使移动应用开发成为开发者关注的热点。J2ME (Java 2 platform Micro Edition) 作为跨平台的移动应用开发平台, 获得了绝大多数手机厂商和运营商的支持, 也是绝大多数轻量级、对多媒体性能要求不高的应用开发商的首选平台, 如果各终端设备厂商制定的标准能够更加规范, 那么J2ME的跨平台特性将会得到更好的发挥和体现。本文全面、系统地对J2ME的体系结构进行了分析, 旨在为普通软件开发者利用J2ME平台进行移动应用开发提供帮助。

1 J2ME体系结构

由于资源受限, 设备对业务具有灵活性和可定制部署的需求。为了适应这种需求, J2ME体系结构在设计时采用了模块化和可扩展的设计。J2ME体系结构的这种模块化和可扩展性是通过构建于设备本地操作系统之上的一个分层软件模型来实现的。我们可以从图1看到分层软件模型中构成J2ME平台的核心是配置 (configuration) 和简表 (profile) 。配置其实是一个规范, 定义了一类设备的共同Java平台, 在配置中同时包含与设备无关的核心类库和Java虚拟机, 这种设计是平台相容性的基础。显然配置舍弃了设备的差异性来保证Java平台的设备无关性, 但是对于具体设备的特殊需求和硬件差异都没有进行支持, 因此在配置的基础之上定义了简表来解决这一问题。简表位于配置之上一层, 是针对一系列设备提供的开发包集合。实质上简表就是针对不同设备而定义的与设备特性相关的API。配置通过虚拟机来和底层的Host OS打交道, 简表构筑于配置之上, 是对配置的扩展和补充, 这样配置就和简表共同构成了J2ME的运行环境。图1是J2ME的分层体系结构[1]。

1.1 J2ME配置

J2ME平台和所有Java平台一样必须保证它的设备无关性, 也就是说要摒弃所有设备之间的差异, 配置就是为了满足这样的要求而设计的。实际上配置就是支持一组通用设备最小的Java平台。由于J2ME平台为之服务的消费电子类和嵌入式的众多设备彼此之间在计算能力和硬件条件上存在着极大的差异, J2ME首先根据最基本的一些特征把它们划分为两类。对于这两类设备而言计算能力是其最主要的区别, 计算能力对设备上的应用和环境起着决定性的影响作用, 因此这两类设备肯定不能使用同样的开发平台, 必须分别予以定义。 在J2ME平台中配置就被分为了两类[2]:一类是CDC (Connected Device Configuration) , 面向的是具有固定的不间断网络连接的共享连接信息设备;一类是CLDC (Connected Limited Device Configuration) , 面向的是具备间断通讯能力的个人移动信息设备。配置负责规定所支持的Java编程语言和Java虚拟机特征, 同时还负责规定所支持的基本Java类库和API。

1.2 J2ME简表

简表是位于配置之上的一层, 用来描述特定的设备, 是支持特定设备 (某类功能的设备) 的API集合, 以Java类的形式提供。我们都知道配置必须满足一类设备最基本的所有要求, 保证平台的设备无关性, 而简表却是为了满足一类设备之间的差异性和设备特性需求而定义的。简表被认为是开发这些设备应用程序的完整工具包。实际上, 简表是对配置的完善和扩展。简表往往定义了某一设备家族上的特殊功能API和扩展类库, 以满足设备之间的差异性需求[3]。通常, 一个设备的应用程序运行需要一个配置和至少一个简表, 也可以同时支持多个简表。目前, 在CDC上定义的简表主要有:基础简表 (Foundation Profile) 、RMI简表 (Remote Method Invoke, 远程方法调用) 、个人基础简表 (Personal Basis Profile) 和个人简表 (Personal Profile) 等;在CLDC上定义了PDA简表和移动信息设备简表 (Mobile Information Device Profile, MIDP) 。

1.3 J2ME平台主要配置和简表

1.3.1 CDC (连接设备配置)

CDC是由Java社团的JSR36和JSR218定义的, 分别定义了CDC1.0和CDC1.1两类规范。CDC所支持的设备是具有固定的不间断网络连接的共享连接信息设备, 这类设备一般是固定的, 因而能够得到稳定而持续的电源供应, 通常运行32位或64位微处理器, 总内存容量大约为2~4MB的设备, 它们体积没有什么限制, 计算能力相对较强。CDC支持的设备主要有电视机顶盒 (Set-Top Box) 、网络电视系统、互联网电话、高端的无线通信设备和汽车导航与娱乐系统等。

CDC类库是支持虚拟机CVM所需要的API最小集合, 通常CDC包含来自Java2平台标准版J2SE中用于构建和运行虚拟机的最小集合Java包。这些基本包有:java.io;java.lang.math;java.text;java.util;java.util.zip;javax.microedition.io;java.lang.ref;java.security.cert;java.util.jar;java.net;java.security。

1.3.2 基于CDC的简表

基础简表 (FP) :是CDC上定义的简表中最基础的一个, 它是一个基础平台, 以后开发出来的能够提供GUI支持、网络等功能的简表都可以附着在FP上。

个人基础简表 (PBP) :是以基础简表为基础在其之上提供了一个能够运行Java applets的简化GUI, 它把图形的Component Framework (组件框架) 保留了下来, 去除了那些复杂的图形模块, 成为抽象图形工具AWT的一个子集。PBP主要适用于对图形件复杂度要求不高的各种娱乐装置, 例如:数字电视机顶盒、游戏机、汽车电器等。

个人简表 (PP) :PP是对个人基础简表的扩展, 针对那些资源相对有限但对网络访问要求很高、基于AWT图形界面的设备, 例如:高端PDA及移动电话等高端设备。

1.3.3 CLDC (连接受限设备配置)

CLDC (连接受限设备配置) 是为使用较小存储容量, 具备间断通讯能力的个人移动信息设备等设计的。Java社团的JSR30和JSR139先后分别定义了CLDC1.0规范和CLDC1.1规范。CLDC支持的这类设备主要是内存在128~512k、计算能力较低、电力供应有限 (使用电池) 的嵌入式装置, 如:呼叫器、移动手机、PDA、销售点终端POS机等低端的无线通信设备。它所需要的运行资源需求远远低于CDC对资源的需求。CLDC虚拟机的参考实现为KVM, 但它并不是唯一支持CLDC的虚拟机, 其它公司只要按照CLDC里的定义来开发, 并且通过兼容性测试, 也可以成为支持CLDC的虚拟机。

1.3.4 基于CLDC的简表

移动信息设备简表 (MIDP) :MIDP是位于CLDC上层的简表, 定义了移动信息设备的类型和提供相关的API集合, MIDP 所定义的功能更加面向用户, 而且比CLDC更高级、更全面。MIDP目前是J2ME平台中最为开发者所熟知且发展最为成熟、应用最为广泛的简表。主要针对在硬件特性上有诸多限制的移动信息设备 (Mobile Information Device, MID) , MIDP定义了图形界面、持久性存储、输入和时间处理等的API, 它有两类规范, 分别是MIDP1.0和MIDP2.0规范。

PDA简表:PDA简表并不是由SUN公司定义的, 而是由Palm公司规范定义的, 这个简表同样是建立在CLDC之上, 是对CLDC的进一步完善。从它诞生到将来的很长一段时间里, 它都将替代kjava类程序包的地位。在Java规范中定义这个简表拥有两个核心功能:用户界面显示工具包和持久数据存储器机制。用户界面显示工具包是抽象窗口工具包的一个子集, 而持久数据存储器机制是为应用程序、数据等实现简单的数据存储而设计的。

1.4 J2ME的整体环境

通过前面对J2ME体系结构中配置、简表等的介绍, 归纳总结得出J2ME的整体平台环境[4]如图2所示。

在一个具体设备之上只能有一个符合其配置规范的Java虚拟机和核心类库, 但在一个配置上可以构建一个简表也可以构建多个简表。在众多的规范中, 由CLDC和MIDP组成的J2ME平台得到了广大移动信息设备生产厂商的支持, 几乎所有支持Java的手机都实现了CLDC和MIDP。

1.5 CDC、CLDC和J2SE的兼容性分析

CDC和CLDC是J2ME针对不同设备之间存在的极大差异而把设备划分为两类后而定义的平台规范, CDC基于CLDC基础之上, 包含了CLDC所有的类和接口, 因此只要能在CLDC上运行的软件必然都可以在CDC上运行;通常CDC中的类包括一个J2SE类的子集和CLDC所有的类, 显然CDC的开发类数量要远远少于J2SE开发类的数量;CDC只是仅仅使用了J2SE开发类的一部分, 并在其基础上进行了优化改进和开发了一些特定类。而CLDC是以CDC开发类为基础直接进行进一步优化, 并没有添加自身需要的任何类[5]。J2SE、CDC和CLDC三者之间的关系如图3所示。

2结语

J2ME是一个完整的开发和运行平台, 同时基于J2ME平台开发无线终端程序具有跨平台及非持续连接的特性, 因此, J2ME平台是开发移动终端增值业务最好的选择。随着无线网络的发展和各类移动终端的不断普及, J2ME的使用必将越来越广泛, 它的安全性和跨平台性会得到更加充分的体现。

参考文献

[1]WAP之家.J2ME在移动设备上的应用[EB/OL].http://www.wapzj.com/down/44/125/html/2005112513212664.html#soft-down.

[2]陈立伟.精通Java手机游戏与应用程序设计[M].北京:中国青年出版社, 2005.

[3]Sun java studio mobility[EB/OL].http://docs.sun.com/source/817-2343/chap3.html/.

[4]JOHN W.MUCHOW.Core J2ME Technology and MIDP[M].Cal-ifornia:Sun Microsystems Press, 2002.

基于J2ME的手机游戏开发 篇5

当前,无线通信已经成为发展最快、最前沿的通信领域之一。手机等移动设备的拥有量早已超过PC机,目前无线市场面临的最大问题是缺乏关键性应用,手机游戏自然而然成了热点问题。目前手机游戏主要有嵌入式游戏、短消息服务游戏、浏览器游戏;在J2ME出现之前,如果希望在移动电话这样的设备上开发游戏程序,就必须使用专用的API和开发工具,并且开发出来的游戏程序无法在其他移动电话上运行。随着J2ME的出现,广大的开发人员可以使用一种通用的开发语言—Java来为移动电话开发,它能在任何厂商的移动电话上运行游戏。因此J2ME的出现必将导致手机游戏程序的普及。

1 J2ME的体系结构

1.1 Java技术

Sun公司的Java目前有三个平台,即J2EE( Java2 Enterprise Edition )、J2SE( Java2 Standard Edition )和J2ME。

作为平台,J2EE定位于服务器端,J2SE定位于客户端,J2ME则定位于嵌入式系统。它们都要基于Java虚拟机(JVM)才能运行。

1.2 J2ME的层次结构

J2ME采用模块化的结构,底层是宿主机的操作系统,内部则分为三层,Java Virtual Machine(虚拟机层);Configuration(配置层);Profile(简表层)。J2ME有两类虛拟机:CVM(C虚拟机)和KVM(K虚拟机),CVM功能比KVM功能更为强大;Configuration层:Configuration是J2ME对于嵌入式设备的规范,在这些规范中,定义了设备至少要符合的运算能力、供电能力和内存大小等规范,按照规范一般把嵌入式设备分为CLDC(Connected Limited Device Configuration)和CDC(Connected Device Configuration)两大类。 Profile层:这一层对于用户和程序开发人员来说是最常见的。Profile中定义了与特定嵌入式设备紧密相关的扩充类库,这些扩充类库是建立在Configuration所定义的核心类库基础上的,它是架构在Configuration之上的规范。

针对移动电话内存小、速度慢和I/O差的特点,J2ME对JVM、Configuration和Profile三层做了特殊的实现。在JVM层,J2ME在手机上移植了KVM(Kilobyte Virtual Machine),只需要几百KB的内存就可以运行;在Configuration层,J2ME规定了CLDC(Connected Limited Device Configutation),它对设备的运算能力和内存大小都有具体的限制。CLDC不支持浮点运算;在Profile层,J2ME规定了MIDP(Mobile Information Device Profile)。MIDP 定义了在手机上运行的Java程序的规范,包括应用程序生命周期、各种UI界面组件、支持Record存储数据和HTTP连接等等,这些在CLDC的基础上的附加功能是通过扩充新的Java类库来实现的。J2ME通用结构与手机中的J2ME结构之间的对应关系如图1[1]所示。

1.3 MIDlet介绍

由图1可知,手机程序其实是完全基于MIDP开发的。使用J2ME的CLDC/MIDP编写的Java程序被称为MIDlet。MIDlet具有良好的兼容性和可移植性。

所有基于MIDP的程序的主类都必须是基于MIDlet的。MIDlet是一个Java类,主要实现startApp()、pauseApp()、destroyApp()方法,以实现MIDlet程序的状态转换功能。MIDlet在应用程序生命周期中有三种可能的状态,分别是:运行、暂停和退出。MIDlet在移动电话上运行的完整过程,就是一个MIDlet状态转换过程。MIDlet程序运行时,总是从实现java.microedition.midlet的MIDlet接口类的构造方法开始,构造方法执行完一次后就不再重复执行。然后通常是运行startApp()、pauseApp(),这两个方法可以重复多次执行。最后是运行destroyApp()方法,这个方法执行完时就意味整个MIDlet程序运行结束。

2 程序的设计思想、框架及具体实现

2.1 程序的设计思想

在开发Java游戏程序时,通常要考虑使用多线程[2]来实现:负责改变图形和刷新显示屏幕、处理用户的输入,处理游戏中各种角色动作的参数变化。作者开发的“小南河村的生活”处理的基本流程是:用户输入、改变游戏中各种角色动作的参数、改变图形、最后是刷新显示屏幕。用户输入和刷新显示屏幕的处理过程会自动放入事件处理线程中运行,改变各种角色动作的参数和改变图像的位置和形态的代码放入由用户创建的新线程中运行,并且它们在用户线程中周期性地执行。详细说明如图2所示。

2.2 游戏框架

游戏程序的框架实质上就是指游戏引擎,无论游戏的大小,都要有游戏引擎起控制作用。简单的来说,游戏引擎就是用于控制所有游戏功能的主程序,从计算碰撞、物理系统和物体的相对位置,到接受玩家的输入,以及按照正确的音量输出声音等。游戏框架打好后,就意味游戏引擎的完成,游戏引擎的完成就意味整个游戏基本成型。

游戏引擎的结构各不相同,不过基本上都是在一个游戏主循环内实现。程序里面的主循环包含了程序框架的最主要的结构体。J2ME的程序一般都包含两个类,一个是MIDlet,一个是Canvas。一般都是把游戏的主要代码放在Canvas这个类里面。这个类是基于事件驱动的程序,有三个主要相应函数 void paint(Graphics g),void keyPressed(int keyCode),void keyReleased(int keyCode)。众所周知,Java语言在语言的低层就支持多线程,在Java中可以使用两种方式来实现多线程操作,这两种方式依次是:(1)继承Thread类或实现Runnable接口; (2)就是java.util包中的Timer和TimerTask类。本游戏做法是让Canvas这个类实现Runnable这个接口,然后在其类中创建一个线程,启动其run()函数,而run函数里面就包含了游戏的主循环。

2.3 游戏关键技术处理说明

2.3.1 优化内存使用

J2EE和J2SE程序员在设计程序时,通常不需要关心内存的使用情况,因为有Java的垃圾自动回收机制。然而在J2ME环境中,必须合理使用内存,因为手机的内存只有几百K。所以在设计J2ME手机游戏程序时,必须谨慎考虑程序运行时所占用的空间资源。优化内存一个有效方法是在程序中主动地清理内存。一旦有资源不再使用就应该立即释放,这样能够提高程序的空间性能。如在程序中有对象不再使用了,就应该立即释放他们,具体做法是设置对象的引用为null,使对象能被垃圾收集器收集。如果程序想尽快进行内存垃圾收集工作。那么,就显式地调用System.gc()方法来进行垃圾收集。但JVM在进行垃圾收集时会暂停解释的工作。这就有可能会使游戏运行有暂时的停顿,所以,System.gc()方法的执行应该放在界面切换的地方,这样游戏就不会有不流畅的感觉了。

内存使用的大户无疑是图片,一张3K大小的图片通常占用20K左右的内存。游戏中会用到大量的图片,而加载图片会占用较大的内存空间和时间,这样就可能会使手机运行速度变慢。这种问题的部分解决办法是:在使用缓存区加载图片时,由小图拼凑成一张大图,创建一张和拼凑后的大图同大的缓存空间,将小图贴在缓存上,以后就可调用缓存图片,如此可以提高程序的运行速度。很大一部份的内存溢出都是发生在构造函数中。内存使用的高峰期都是在构造函数中,所以避开这个高峰能有效地防止溢出。通常的办法是第一次使用时初始化。如下所示:

if ( img==null )

{ //初始化

}

游戏很多时候都需要地图数组、声音数组,还有一些其它资源,最好是在程序需要时再加载进内存中。

2.3.2 图形双缓存

在游戏中,当角色在一定的场景中有动作时,如行走。就要用背景擦除角色,然后在另外一个位置重画角色,这样在某一瞬间,可能在角色的位置看到背景。由于这发生在瞬间,所以会出现闪烁。用双缓存技术可以消除动画闪烁[3]。

缓存区是绘图时使用的屏外内存区。使用双缓存不是直接绘制屏幕,而是绘制到后缓存区,然后将整个缓存区复制到屏幕上,后缓存区只是普通的图像环境。可以Canvas类中的createImage( int,int )方法生成后缓存区。本游戏中基本做法是:

第一步、创建图象在缓冲区的图形环境:

//创建后缓冲区

Image buf = Image.createImage( this.getWidth(),this.getHeight() );

//得到后缓冲区绘画环境

Graphics gbuf = buf.getGraphics();

第二步、将加载后的图片画在后缓冲区绘画环境gbuf中:

//加载图片

Image imgStartMenu = Image.createImage("/res/startMenu.png");

//将图片画在gbuf上

gbuf.drawImage(imgMenuBG,GameConfig.screenX >> 1,

GameConfig.screenY >> 1,

Graphics.HCENTER | Graphics.VCENTER);

第三步、将后缓冲区整个绘画环境gbuf复制到屏幕上

// paint(Graphics g)方法是Canvas类中在屏幕上绘制图像的方法

public void paint(Graphics g)

{ g.drawImage(buf,0,0,20);

}

2.3.3 在不支持透明图形的系统中绘制精灵

在标准的MIDP规范中仅支持PNG图形格式,即不支持透明图形格式GIF。

如果系统不支持透明图形,就会导致很难绘制精灵(精灵也就是游戏程序中可以四处移动的游戏主角)。因为两个运动的物体重叠时,其中一个精灵图形周围的白色图会覆盖另一个物体本应显示的部分图形,会导致图形失真。

在本文开发的“小南河村的生活”游戏程序中,是用Graphics类中的setClip( int x,int y,int width,int height )方法在不支持透明图形的系统中实现真实的精灵绘制。SetClip()方法是在屏幕上设置绘制图形的有效区域,只有在setClip()方法设置的区域内的屏幕才会被改变,而在setClip()设置以外的图形是不会被改变的[4]。使用setClip()方法可以在绘制精灵时,仅绘出有物体图形的部分,而白色图形部分不绘制。

2.3.4 设计重复按键功能简化用户输入

使用J2ME的移动电话时,并不是所有的电话都具有重复按键的功能。例如在本游戏中,如果在游戏玩家需要使用RIGHT键移动游戏中的人物向前行走时,并且系统不支持重复按键,则玩家要反复按很多次RIGHT键才能使游戏中人物不断地向前走动。这样的游戏,用户是不会喜欢的。

大多数的移动电话并不支持重复按键,但是可以通过MIDP的编程来模拟重复按键功能。本游戏程序中处理重复按键问题的基本思想是:

(1)建立一个重复执行的任务。(2)当键被按下时,在这任务中执行按键的功能。(3)以一定的频率反复执行这一任务。(4)当按键释放时,在该任务中放弃执行按键的功能。

在本游戏中具体步骤是:当玩家按下键时,keyPressed()方法设置该键键值,并赋到字段keyState中,当玩家释放该键时,keyReleased()方法清除字段keyState中的键值。在不断循环的用户线程中,调用currentKeyState()方法,该方法检查当前系统是否有某个按键键值,有则返回true,之后执行该条件表达式下的语句段,即人物行走的参数的处理代码;如果当前系统没有该按键键值,则返回false,跳过人物行走的参数的处理代码段,继续执行下面的其他代码。

2.3.5 考虑打进的电话和短信

移动电话的主要作用是方便随时随地进行通信。当手机上一个游戏程序的运行被打进的电话、短信或手机其他操作打断时,游戏程序应该适当地“暂停”或“继续”,以实现J2ME程序与手机平滑交互。

在J2ME中通常有两种机制来暂停或继续一个程序,它们是:“pauseApp/startApp”和“hideNotify/showNotify”。MIDP中的说明是应该调用“pauseApp/startApp”。但是,有些手机的操作系统并不正常地调用它们,而是调用“hideNotify/showNotify”[5]。为了提高程序的可移植能力,最好的方法就是这两种情况都要处理。

本游戏程序中,具体处理办法是:在pauseApp()方法中调用hideNotify()方法,在startApp()方法中调用showNotify()方法。处理游戏暂停的代码放在“hideNotify/showNotify”中。这样就保证无论手机操作系统用哪种机制来处理中断,暂停或继续的处理代码都能执行到。具体的代码在程序的NurturanceMID 类和NurturanceCanvas类中。

3 实例测试及性能分析

游戏代码中需要的图形和声音等资源都放在sre目录下的res文件夹中,java文件放在sre目录下的rpghb文件夹中,游戏中用于持久化存储的RMS文件会自动生成在sre目录的父目录下。游戏代码在JBuilderX平台、Sony Ericsson J2ME SDK 2.2.1、SonyEricsson_S700模拟器上测试通过,具体配置如图3所示。

加载游戏的JAD文件配置是在JbuilderX系统中进行的,“Required”选项中:“Name”是写游戏名称的,“Vendor”是写开发人或开发商的;MIDP和CLDC一定要用1.0,游戏打包后的JAR文件是187K,运行时占用的最大内存为790K左右,完全符合SonyEricsson_S700手机硬件的要求,在程序运行时也没有明显的不流畅。

4 结论与展望

手机游戏程序与普通PC机上的游戏程序基本的设计思想和基本的编程技术都是相同的,只是由于手机中系统资源的稀缺,设计时必须要仔细考虑系统资源的承受能力,一个重要的原则就是要求游戏的设计尽量缩减对系统资源的使用。这样就导致手机游戏程序的部分功能在具体的处理过程中与普通PC机上的游戏程序不同。不仅仅是手机游戏程序,所有的嵌入式设备的应用程序的设计原则都要求尽量缩减对系统资源的使用。

现在限制手机游戏发展的瓶颈是手机的硬件处理能力和联网传送能力。随着技术的发展,相信这些问题在不久的将来能很快得到解决。那时,可以将网络游戏的客户端下载到手机上,在手机上运行网络游戏的部分功能,如:买卖物品、在固定的区域练级。那时手机游戏就能在不降低趣味的基础上充分发挥其随时随地不受地点限制的特性。

参考文献

[1]杨秋霞.基于J2ME的手机游戏开发.计算机时代,2005(5):11-13.

[2]Cay S.Horstmann,Gary Cornell.最新Java2核心技术.第五版.王建华,董志敏,杨保明,译.北京:机械工业出版社,2003:61-64.

[3]David Brackeen.Java游戏编程.邱仲潘,译.北京:科学出版社,2004:39-40.

[4]http://gceclub.sun.com.cn/chinese_java_docs.html.

浅谈J2ME游戏视觉效果的改进 篇6

Java平台演进到Java2后,Java平台分别针对不同领域的需求主要被分成三个版本,亦即J2EE、J2SE与J2ME。其中J2ME定位在消费性电子产品的应用上。这个版本针对资源有限的电子消费产品的需求精简核心类库,并提供了模块化的架构让不同类型产品能够随时增加支持的能力。

J2ME中有两个最主要的配置:Connected Limited Devices Configuration(CLDC)和Connected Devices Configuration(CDC)。作为第一个面对小型设备的Java应用开发规范,CLDC是由包括Nokia,Motorola和Siemens在内的18家全球知名公司共同协商完成的。CLDC是J2ME核心配置之一,可以支持一个或多个profile。其目标主要面向小型的、网络连接速度慢、能源有限(主要是电池供电)且资源有限的设备,如手机、PDA等。

2 手机游戏的制约

现在PC上的3D游戏已经达到了一个相当的高度,在高性能的硬件平台上运行起来视觉效果堪称完美。随着技术的发展,人们开始想到在手机上开发3D游戏。虽然现在已经有了一些手机3D游戏,但是这些游戏要求的硬件性能很高,只有少数高端手机才能支持这些3D游戏。对于中低端手机,只能在平淡的2D画面上增加效果,在视觉上使游戏界面产生立体感,或利用视觉差产生仿3D的效果。下面以大家熟知的小游戏“弹球”为例说明。

3 弹球游戏增强效果的设计

在传统的2D弹球游戏中界面视觉效果十分单调。如图1所示。

对于界面的优化,主要是在砖块、弹球、挡板的右下方添加阴影,在砖块、挡板上方添加亮线,在弹球的中间添加亮点,在挡板、砖块、弹球的右下方绘制暗色,从而利用色彩上的差异达到增强立体感的效果。下面分别介绍一下对弹球、挡板和砖块的模拟3D的处理。

3.1 弹球的处理

在类定义的时候就定义了球的颜色为红色,同时定义了右下方阴影的颜色为暗色,对于球体也分了亮色和暗色,弹球中间的颜色为亮色。

对于阴影,在绘制的时候就是在弹球的右下方绘制一个和弹球等大的一个圆,由弹球覆盖住阴影的大半部分,留下而露出的小半部分恰恰起到了增强立体感的效果。在绘制弹球时,对于弹球的边缘先用亮色描一遍,再在右下的半圆使用了暗色覆盖了原来的亮色,达到模拟3D的效果,如图2所示。

3.2 砖块和挡板的处理

在砖块的色彩处理上,作者采用了和弹球处理类似的方法,即在图形的左上方绘制亮线,在图形右下方绘制暗线,在图形右下方绘制阴影。而在挡板的处理上简单地使用了阴影。这里就不再赘述了。砖块和挡板的放大图形如图3所示,图4为游戏效果。

4 仿3D弹球游戏的设计

仿3D游戏是在2D的平台上的实现3D效果的游戏,其原理就像在平面的纸上画3维坐标系,利用绘制的图形达到3D的效果。这种思想已经接近了3D游戏设计的思想。在二维弹球设计中我们维护的是一个平面上的信息,实质上维护的是一个二维数组,小球运行的方向也是一个二维的向量。对于三维的弹球游戏,我们需要使小球在一个三维空间内运动,那么对应的,我们所维护的就是一个三维数组,小球运动的方向也是一个三维的向量。

对于三个维度,x轴与y轴就使用平面的x轴与y轴,z轴的处理就略为复杂一点,z轴的方向使之为xy平面的法线向外的方向,利用物体大小的变换产生上下移动的效果,即z轴对应的数值反映在界面上为物体的大小。整个界面的视角为俯瞰,z轴的数值大则物体大,表示距观察点近,z轴的数值小则物体小,表示距观察点远。

图5为3D弹球游戏的效果。

整个游戏的代码量与内存占用量较真正的3D游戏要小的多,适合在中低端手机上运行。

5 手机3D游戏的展望

对于J2ME程序而言,Mobile 3D Graphics API(JSR184)的出现,使得为手机应用程序添加3D功能成为可能。M3G是J2ME的一个可选包,以OpenGL为基础的精简版,一共有30个类,运行在CLDC1.1/CLDC2.0上(必须支持浮点运算),可以在MIDP1.0和MIDP2.0中使用。目前,支持M3G的手机还比较少。M3G只是一个Java接口,具体的底层3D引擎一般由C代码实现。

在M3G中,Graphics3D是3D渲染的屏幕接口,World代表整个3D场景,包括Camera(用于设置观察者视角)、Light(灯光)、Background(背景)和树型结构的任意数量的3D物体。3D对象在计算机中用点(Point,Pixel)、线(Line,Polyline,Spline)、面(Mesh)来描述,具体存储和运算(如旋转、投影)都是矩阵运算和变换。

类似于Microsoft的D3D,M3G支持两种3D模式:立即模式(immediate mode)和保留模式(retained mode)。在立即模式下,开发者必须手动渲染每一帧,从而获得较快的速度,但代码较繁琐;在保留模式下,开发者只需设置好关键帧,剩下的动画由M3G完成,代码较简单,但速度较慢。M3G也允许混合使用这两种模式。

对于手机3D游戏的开发,必须解决时间与空间的折中问题,现在的中低端手机性能距3D游戏的要求还有一段距离。但相信随着硬件的发展,在不远的将来利用硬件就可以解决时间与空间的矛盾,3D游戏出现在中低端手机上并不是遥不可及的梦想。

参考文献

[1]池雅庆,周珺,王耀.手机应用项目开发实践[M].北京:中国铁道出版社,2007.

[2]孔明放.J2ME程序设计教程[M].北京:科学出版社,2005.

基于J2ME的手机室内导航系统 篇7

关键词:J2ME,室内导航,GPS,数字地图

1 室内导航系统的应用现状和发展

1.1 导航系统的应用现状

近年来GPS系统技术得到了快速发展并被广泛应用,人们越来越深刻地认识到卫星导航系统具有巨大的潜力和难以想象的宽广应用领域。尤其是手机导航的应用日益受到广泛的关注和重视。当代全球空间微型导航定位系统GNSS,主要有美国GPS系统、俄罗斯的GLONASS系统、双静止卫星导航定位系统(中国“北斗”双星系统)、欧洲的Gali2leo系统[1]。随着这些导航系统的日臻完善,其定位精度度越来越高,第四代GPS卫星——BlockⅢ能够达到20~50cm的实时定位精度[2],这为手机导航的应用和推广提供了强大和稳定的技术支撑平台。

随着中国经济的飞速发展,中国移动通讯手机用户迅速发展壮大,各种中、高端手机已经逐渐得到普及。同时,基于GSM网络开发的分组数据技术通用分组无线业务(GPRS)和码分多址(CDMA)技术日渐成熟和优化[3],给基于这些通信技术的增值服务提供了无限的发展空间,也正是在这种环境下,手机导航服务逐渐成为广大手机用户的日常必须[4]。与此同时地图已经从纸上走进了互联网和个人电脑甚至手持设备里面。越来越多的手机也已开始支持数字电子地图功能,这极大地刺激着LBS市场,未来手机将会占据全球导航卫星系统接收机的主导地位,人们可以很容易的在电子地图里面搜索感兴趣的地点,行车线路和公交线路等,大大方便了地图使用者。除了传统的地理信息服务,各大地图和内容提供商还研发了基于电子地图的许多有趣应用。如今,电子地图已经越来越成为人们常用的一种工具。

虽然全球定位系统(GPS)已经在全世界得到了最广泛的应用,但现有的GPS接收机大多工作在的户外等环境中。如何为了在一些陌生或复杂的室内环境中找到特别的地方、特定的人或目标,引起了人们对室内导航系统的关注。如何通过结合电子地图技术实现室内导航是本文讨论的重点。

1.2 基于J2ME室内导航系统的优缺点

在手机开发中,有J2ME、BREW、Symbian、Windows Mobile、Android等开发方式,和这些开发方式相比,J2ME技术是使用比较普遍的一种技术,下面就对这些技术进行一些简单的比较。

J2ME技术的优势:

1)可移植性强

Java是通过虚拟机进行解析的,只要该手机支持Java功能,那么使用J2ME技术开发的程序,可以经过简单的修改以后,在不同厂商的手机上运行,这个是J2ME技术最大的优势。

2)开发速度快

由于Java语言自身的特点,和系统的关联不大,所以开发速度很快。程序的开发周期比较短。

3)技术入门快

由于JAVA语言相当的普及,而对于有一定JAVA语言基础的人来说,学习J2ME技术的门槛很低,所以J2ME技术的普及速度很快。

基于J2ME平台,结合GPS和电子地图技术,实现室内导航系统,为用户提供更好的导航服务。

2 基于J2ME的室内导航系统的设计

本文提出了一套结合Java移动平台之间网路式地图服务的体下架构,开发了室内导航系统。系统框架如图1所示。

图1中主要包括了手机,网络构建、地图服务器、服务器、移动设备。

手机或其他支持Java的移动设备通过网络构建与地图服务器相连,网络构建将手机发送的定位导航发送给地图服务器,地图服务器结合将根据用户指令提供相应的数字地图,服务器将负责把地图服务器为用户提供的信息发送到手机移动端。其中地图服务器运行在远端的网络中,结合移动定位系统提供使用者所在区域的地图和距离算法,得出用户当前位置到目标位置的最短距离。由于数字地图等资料存储在远端,因此可以随时方便地更新和精细化。本系统开发在支持Java的手机平台上,用户可以轻易地透过无线网络传输实时的地图信息。其中GMLC(Gateway Mobile Location Center)是提供移动网络系统内相关定位信息的通道[5]。

应用上述的体系架构,实现系统的两大功能。

1)导航查询功能

可以在操作终端上搜索你要去的目的地位置。

可以记录用户常要去的地方的位置信息,并保留下来,也和可以和别人共享这些位置信息。

模糊的查询用户附近或某个位置附近的如定位大型商场超市内的生活用品区,食品区、时尚休闲区等信息。

2)导航路线规划功能

导航系统会根据你设定的起始点和目的地,规划一条适合步行到达的线路。

规划线路可以设定是否要经过某些途径点。

2.1 系统主要功能设计

1)用户登陆和注册

为新用户提供账号注册功能。

为老用户提供登陆,登陆后可进入系统。

2)选择商铺

用户进入系统后,选择他所在的商铺。

这一步是初始化系统。系统会下载当前的商铺地图,连接GPS定位到用户所在的区域。

3)搜索中心

搜索中心分为两个部分:

按物品搜索:此部分为有具体商品购买目标的用户提供最佳路径。系统会就搜索条件返回两种结果:一是该商铺不存在该商品。二是从用户所在地点到商品所在货架的最佳路径。

按地点搜索:在大型超市中,用户可能找不到收银台、卫生间、服务台或者找不到某类商品所存放的货架。通过地点搜索可以方便用户找到想去的地点。

4)信息大厅

为用户提供各大商铺发布的信息。当用户进入系统,选择要进入的商铺。系统会及时下载更新当前商铺发布的信息,比如:店内海报等。

5)留言中心

提供用户与系统开发商的交流互动平台。系统开发商根据用户的反馈,修改完善系统。

6)帮助中心

提供网站官方帮助服务,就网站的使用规则和操作等方面的问题向用户提供咨询。

2.2 系统关键部分的设计与实现

1)地图服务器

为用户提供数字地图服务。其能实现放大、缩小、输出、裁剪、查询周边等功能。能提供矢量地图服务,矢量地图的矢量数据包含有拓扑信息,便于地理空间关系分析;支持地图数据压缩处理率,以提高数据传输率。数字地图服务器还需要有接受用户提交的地图定位数据和导航服务器上传过来的数据,正确生成路径,为用户进行导航。当然数字地图也是基于J2ME技术开发的。

2)CDMA/GPRS代理/网关

手机用户要连接到远端服务器,需要通过网络,就要通过网络代理或者中间商提供的服务。他主要是手机导航客户端和地图服务器之间的数据通信代理、缓存和日志记录等功能的模块。负责协议处理,提供多协议接入的统一接口服务,方便协议升级和扩展。

3)导航服务器

接受地图服务器传来的定位数据,依靠现有的导航路径算法来计算出其最佳路径,主要是最短路径算法和最优路径算法等的实现。它生成的结果提供给地图服务器以便地图服务器根据生成的路径对装饰层进行裁剪和过滤。

4)手机导航客户端

内置手机GIS引擎及导航通信引擎,能向导航引擎发起各种服务的请求并接受回应,同时能接受GPS模块发送过来的位置信息,从而模拟出人行走的路径并给出适当的导航信息提示,支持矢量地图描绘和显示。

5)GPS模块

实时定位,实时更新位置数据。一般而言每隔一定时间(最短为1秒)获取一次用户当前的地理坐标及方向等信息,发送给手机导航客户端。

3 结束语

手机定位导航的出现给定位导航业注入了新的活力,如何充分利用手机定位导航功能为用户提供方便,快捷的导航资讯成为手机定位导航推广的重要原因之一。本文通过对手机定位导航系统快发发展今天的分析,发现手机对室内定位导航支持不够,对了对J2ME开发平台下手机室内导航系统进行了研究,提出了可行的解决方案。实现了手机室内导航功能,在一定程度上扩展了手机定位业务的应用。

参考文献

[1]张勤.GPS测量原理及应用[M].北京:科学出版社,2005(7).

[2]刘基余.GPS卫星导航定位原理与方法[M].北京:科学出版社,2003(8).

[3]啜钢,王文博.移动通信原理与应用[M].北京:北京邮电大学出版社,2002(10).

[4]徐静.室内移动导航系统的路径规划方法研究[M].长春:长春理工大学,2009.

J2ME 篇8

关键词:J2ME,JPG地图,SVG地图

1 引言

在国内外研究中,Mobile SVG(SVG的一个子集)的研究是一个新颖的科研方向。SVG具有很多优点,例如SVG是基于XML标准的,它是高质量的矢量图像和由文本构成的图像等等[1]。

本文目的是通过构建一个基于J2ME的手机定位系统来详细分析以JPG和Mobile SVG为代表的两种格式地图在J2ME手机上加载和显示的方法及性能比较,为Mobile GIS的研究提供有价值的参考技术。

2 手机定位系统的构建

系统环境需要无线网络与HTTP协议的支持。Web服务器通过HTTP流接收从客户端发送过来的请求和发送处理的结果[2]。而地图服务响应处理模块则是系统的核心部分,专门负责对地图数据的实际处理和返回。图1是系统的总体功能结构图。

3 系统关键技术的分析与实现

3.1 客户端的选图策略和地图数据的处理

GPS是每一秒钟数据自动更新一次,如果发现经度或者纬度超出了地图的经度和纬度的范围,则它会更新并显示此时所在位置的新地图。如图2所示。

选图策略:如图3所示,当前显示的地图分为9个区,由于采用地图的经度和纬度边界分别相差是0.3分左右,服务器到移动终端之间的数据通信可以在移动对象的0.01分经纬度移动范围内完成,所以它们的划分规则是:高纬度越界线的纬度数是高纬度减去0.01分,低纬度越界线的纬度数是低纬度加上0.01分,西经越界线的经度数是左边的经度加上0.01分,东经越界线的经度数是右边的经度减去0.01分。当移动点超过越界线时,移动终端的程序会触发一个线程去检测当前是否存在预缓存的地图;如果没有,它会从服务器提取地图,否则,它不启动调图线程。当定位点来到1,2,3的任一个区域时,它会向服务器调用上区域的局部地图作缓存图;当定位点来到1,4,7的任一个区域时,它会向服务器调用左区域的局部地图作缓存图;当定位点来到3,6,9的任一个区域时,它会向服务器调用右区域的局部地图作为缓存图;当定位点来到7,8,9的任一个区域时,它会向服务器调用下区域的局部地图作缓存图;当它到1,3,7,9区域时,程序不但会调用满足前面条件的地图,还会再调用一副两个正方向之间区域的局部地图作为缓存图;当它到5区域时,程序不做调图处理。

手机程序判断经纬度后,作出选择性的保存和删除。具体实现是:当定位点进入新的区域时,它会判断是否需要调用新的地图,如果不需要,则不会向服务器发送HTTP请求;如果需要,它会把当前点的经纬度,正在显示的地图ID和目前存有的地图ID,还有请求哪种格式的地图的信息以HTTP请求的方式发到服务器,然后会把远离区域的地图缓存清空,因为手机存储容量有限,所以只缓存四幅地图。这样就实现了接收来自服务器传来的地图数据。

3.2 客户端的地图显示及服务器端的数据处理

(1)栅格图片的显示及服务器端的数据处理

当服务器从HTTP请求中取出数据进行分析时,服务器可以得到的信息有当前手机用户的经纬度,手机目前显示的地图,手机里缓存的地图和请求地图的格式是栅格图片。服务器选图的策略与手机客户端选图时的策略类似,具体的实现是:它首先会根据ID来调出地图的数据,用当前的经纬度来算出定位点所在的区域(如图3),然后它会判断需要调用多少幅地图,而且由传来的参数可知目前手机缓存了哪几幅地图,如果缓存里有需要调用的地图,则服务器就不发送此地图,服务器只发送手机没有的地图。

服务器传参数规则是,先把需要调用的地图的ID以字符串的形式发送,形式是(*-*-*),如果是一幅地图则表示为(*),接着把每幅地图以字节流的形式发送到手机上。

手机客户端就利用Image类的createImage函数来在客户端生成地图,然后用drawImage函数来显示地图。

(2)矢量图片的显示及服务器端的数据处理

当服务器从HTTP请求中取出数据时进行分析后,它进行的处理和栅格地图类似,只是发送地图为SVG格式的地图。

手机客户端这时就不能用栅格地图的显示方法来显示地图了,这时采用开源项目的Tinyline SDK来实现,该开发包主要用到三个包:com.tinyline.svg(该包主要实现动画SVG Viewer的相关API),com.tinyline.svg.raster(主要是实现静止SVG图形SVG Viewer的相关API),com.tinyline.tiny2D(主要是为CLDC 1.0平台定制的2D图形API)。

加载和显示SVG的策略是:首先建立一个MyCanvas的类,这个类继承了Canvas类,还实现了ImageConsumer和ImageLoader两个接口,然后在这个类里面初始化TinyPixbuf,它是在画布上生成一个矩形区域,这个区域就是SVG图片显示的区域,放大和缩小可以改变它构造函数的参数来实现。接着,初始化SVGRaster类,这个类是栅格化TinyPixbuf类生成的图片区域。最后调用SVGAttr类,SVGParser类来解析SVG图片[3]。

4 实验分析

本文选了5幅地图作比较,这5幅地图各有两种地图格式,分别是JPG格式和SVG格式。实验用的是无线网络,测试中的数据传输速度有7kb/s,地图文件不超过25kb。

通过三个实验数据表可以归纳出以下三点结论:

第一,SVG地图显示的时间明显是比JPG地图显示的时间长很多,这是因为SVG是XML的文件,所以J2ME手机显示此类图片要对其进行XML解析,这是相当耗资源和时间的。

第二,JPG地图放大或缩小所需的显示时间比直接显示图片所需的时间长,而且地图放大所需的显示时间比地图缩小所需的显示时间长。这是因为,JPG地图的放大或缩小都需要进行处理,而且放大地图需要的资源最多,所以出现以上的实验结果。

第三,SVG地图显示时间明显比JPG地图显示时间长,它所需的显示时间随着地图放大系数增加而增加。

尽管SVG在显示静态地图的性能比不上JPG地图,但是在显示动态地图时,JPG实现起来就非常困难,而且所需资源有可能远远大于SVG。由于SVG是基于XML的,所以只需要在SVG文件加描述标记和内容就可以轻易地实现动态地图效果了。

本文用JPG格式的图片做一个动态效果的实验,设计了一个线程来不断地管理和切换JPG图片,这时发现手机对按钮的响应时间变长了,甚至有时会出现手机没法使用的情况。用SVG图片做同样的效果,尽管J2ME手机显示SVG图片的时间稍微长了一点,但是比JPG格式的图片做的实验所需的显示时间短,而且它对手机的资源消耗几乎没有变化。

在放大地图的效果上,JPG地图的显示效果比SVG地图的显示效果差。本文做了放大同一个区域地图的实验,这个区域有两种格式的实验地图,分别是JPG地图和SVG地图,对这两种格式的地图放大一倍得出如图4的实验效果。由图4可以看出,JPG地图会失真,但是SVG没有,这与SVG具有放大无损性吻合。

5 结语

本文讨论和分析了两种地图格式在J2ME手机上的加载和显示,由实验可以看出,SVG地图在目前的手机硬件上显示静态地图的性能还是和JPG地图有点差距,但是SVG在显示动态地图时,JPG格式的地图就显得力不从心了,而且SVG具有地图的放大无损性。由此可见,随着手机硬件设备的不断更新换代,J2ME手机设备显示SVG地图的时间将会大大地减少,SVG格式的图片将会越来越广泛地出现在未来的Mobile GIS应用领域中。

参考文献

[1]W3C,2003,Scalable Vector Graphics(SVG)1.1Specification.http://www.w3.org/TR/SVG/

[2]王晋桃,朱欣焰.基于Java手机的地理信息服务探索[J].测绘通报,2004(3):51-54.

J2ME 篇9

CRM是一种以客户为中心的, 集成了销售、营销和客户服务的, 能够为企业创造并增加价值的商业策略。IT技术是企业CRM实施所必须评估、审视和优化的重要资源之一, CRM实施涵盖了CRM全流程改进、CRM软件实施以及系统集成等内容。

较为完整的CRM实现策略模型, 包括:创建数据库、分析、客户选择、客户定位、关系营销、隐私问题和评价矩阵等七个过程, 并建立相应的计算机系统模型。以保险业为案例, 实施CRM要求保险公司建立其客户服务与支持站点, 并增加多种应用工具:

·基于Web的服务与支持站点

·呼叫管理

·Internet自助工具

·现场服务和派遣

现场服务和派遣可以实施移动CRM应用, 极大地简化流程, 快速响应客户的要求, 提高工作效率, 增强客户的满意度。业务处理逻辑部分和数据库部分可以分别部署在相应的应用服务器和数据库服务器上, 移动端和服务器端进行通信时首先通过一个无线信号接入点进入Internet, 然后与处于防火墙后的应用服务器进行信息的交换, 完成用户所需的功能。

移动客户端功能包括:

·业务员身份认证, 负责实现销售等人员通过手机进行注册, 登录和密码修改等管理。

·客户资料查询, 负责实现通过手机查询客户资料信息。

·产品查询, 负责实现通过手机查询公司保险产品信息。

·保单查询和维护, 实现业务员对客户服务信息更新, 例如更新客户信息、提交客户的保单申请等。

1、系统分析和设计

许多企业采用J2EE作为企业级应用的解决方案, 在建立移动商务平台时, 由于移动终端设备资源有限, 它不提供直接对后台数据库的访问能力。因此, 要想使移动设备能够访问到数据库系统, 必须建立移动终端程序 (使用J2ME技术) 和服务器端应用程序 (使用J2EE技术) 。

1.1 移动客户端设计

J2ME在传输层提供了对TCP/IP协议的支持, 以及一组面向应用程序的高层协议, 以支持HTTP协议, 在应用层它提供了JAVA开发环境, 可以用Client/Server方式来访问Internet上的所有数据, 它与标记语言无关, 不是Brower/Server方式。

1.2 服务器端的设计

Servlet解释来自移动终端的请求, 然后分发给EJB组件。如果完成了请求, Servlet就产生响应, 将结果返回给移动终端MIDlet。

EJB组件封装有应用程序的业务逻辑。所有的EJB实例都运行在EJB容器中。EJB容器提供了系统级的服务, 如安全、事务处理、资源管理等。EJB组件使用JDBC API来访问关系型数据库;EJB封装了各种业务逻辑, 提供了访问接口, 接收来自servlet的各种服务请求, 调用实体Bean, 将结果返回给servlet。

数据库系统处理SQL语句后, 会将处理结果以一个结果集的形式发送到业务逻辑层, 业务逻辑层将接收到的信息提交给表示层, 表示层再通过HTTP、HTTPS或XML将响应信息返回到客户端。

2、系统实现

客户端采用MIDlet编程技术, 主要实现系统的操作界面并处理与服务器的连接。考虑到HTTP协议的通用性, 系统采用HTTP作为客户端和服务器端的通信协议。客户端程序中, 访问网络的invoke-Servlet () 方法实现如下:

同时, 为了解决访问网络线程和事件处理线程因为争抢共享资源---MIDlet对象而出现的死锁现象, 客户端程序中合理设计了多线程的同步和交互。由于篇幅关系, 实现代码省略。

服务器端采用Servlet程序, 可开启多个线程供多个用户的同时访问。Servlet程序接受用户请求, 从数据库系统中查询所需的信息, 并将结果返回给客户端。其主要实现代码如下:

3、数据加密传输

J2ME本身就提供1024位的RSA认证加密和128为的三重DES加密技术, 它的安全机制的安全机制主要体现在三个方面:

·通过J2ME安全体系保证下载到移动设备上的应用程序安全的运行, 如两重校验机制。

·采用安全基础技术以保证数据传输的安全和实现交易的身份认证等, 如加密技术、消息认证、数字签名和Bouncy Castle J2ME加密包。

·采用安全通信协议以保护移动商务或企业应用的信息安全, 如HTTPS/SSL协议。

对关键信息进行加密和解密的相应接口, 可以根据具体的应用找出合理的方案。不过, 对通信过程中传输的信息的加密还要考虑到所传输的数据的格式。

把数据封装成XML格式是现在数据传输的主要方式。XML格式能够以名称-值的形式表达含义丰富的复杂信息, 以满足现实系统的需要, 也可以把需要进行交互的数据信息封装成XML格式进行传输, 并使用现有的XML加密和认证的类对其进行处理, 以保证信息的安全性。

移动终端与应用服务器交互的数据用XML转换协议封装后发送至XML处理模块, XML处理模块将其转换成XML文档并进行相关安全处理后转发给应用服务器。

1.用户将数据用XML转换协议封装后通过安全数据通道发送至XML处理模块。

2.XML处理模块访问用户信息库请求用户相关密钥。

3. 取得用户私钥。

4. XML处理模块将用户数据形成XML文档, 利用用户密钥对文档进行加密、签名等处理后通过公共信道发送给应用服务器。

为了使服务器端可以生成机密信息的签名和加密的xml文件以及J2ME客户端可以解析收到的XML文件, 需要正确的加密包和XML解析器。

4、结束语

随着3G网络的开放, 无线应用中遇到的难题会逐渐被解决, 移动CRM必将成为未来企业进行客户关系管理的主流服务机制之一, 拥有不可估量的发展前景, 采用J2ME扩展原有系统必然是未来的一个热点。相对于一般的移动电子商务系统, 本文所提出的基于J2ME-J2EE的移动CRM系统, 具有较高灵活性和安全性, 可以成为企业业务的移动解决方案。

摘要:采用J2ME扩展J2EE企业级应用到移动终端, 是未来移动业务发展的趋势。本文阐述了基于J2ME/J2EE的系统架构, 给出移动客户端和企业J2EE整合的关键技术, 构建了一个移动CRM系统。

关键词:移动技术,J2ME,CRM系统

参考文献

[1].Ricardo Chalmeta.Methodology for Customer Relationship Management[J].The Journal of Systems and Software, 2005.

[2].李焕.基于J2ME/J2EE的移动应用系统研究[J].电脑知识与技术, 2006, 05

[3].杨骐, 王加阳, 刘连浩, 龚铮.基于J2EE体系结构的CRM系统的设计与实现[J].计算机应用研究, 2002, 11

【J2ME】推荐阅读:

上一篇:质量监督地图下一篇:水景住宅

本站热搜

    相关推荐