j2me讲义.docx
《j2me讲义.docx》由会员分享,可在线阅读,更多相关《j2me讲义.docx(17页珍藏版)》请在冰豆网上搜索。
j2me讲义
希望本教程能够助你拨开移动开发的迷雾,
走入这一崭新的领域。
移动应用,未来属于你和我。
前言
不知道你是否曾经有过这样的经历:
一个人百无聊赖的靠在沙发上,摆弄着你的手机,企图从你的移动终端上找到除了打电话和收发短信之外,别的有趣的功能。
是的,手机等智能移动终端早已经融入了我们的生活,并成为我们不可或缺的重要工具。
每每看到有关手机销售量进一步增长的消息的时候,似乎总有什么在刺激着身为开发者的你和我的神经。
在庞大的设备群等潜在因素面前,人们似乎又看到了.net曾经的美好时光。
然而正是被人们广泛看好的移动增值应用,却是个烫手的山芋。
很多人在徘徊。
难怪某位设备制造商的朋友在一次交流会上,
半开玩笑的说,在卖场里是不会有人利用赠送java增值应用来促销手机的,因为效果远不如“买一部手机送一斤大米”来的好。
事实证明,好的前景不会自动的变成真正的商业应用。
对年轻的移动增值产业来说,机会和陷阱同时存在。
处处充满了选择。
所以在你踏入这一新兴领域之前,请仔细思考你的机会和风险。
不过令人鼓舞的是,我们已经看到一批很有特点的移动应用供应商正在这条道路上努力的探索着,并且有些已经开始盈利。
希望你的加入能给移动应用带来新鲜的元素。
回到开发者的角度,你需要知道何时使用什么样的技术,并且你的应用需要有足够的吸引力。
本教程是讲解基于JAVA的J2ME技术的。
这项技术设计的初衷是为了解决在不同移动终端上运行相同的JAVA应用。
就它的本意来说是个好点子,尽管实际部署中你还需要很多技巧。
从语言这个层次上讲,JAVA相较C++拥有与生俱来的开发高效率,但执行效率较低的特点。
关于选择他们的争论可以持续好几个星期。
J2ME运行效率低的问题往往被拿出来受到指责,不得不指出的是J2ME(准确的说是MIDP1.0)是广泛部署在手机上的第一代智能开发平台,很少有手机不支持这一平台。
也正是因为推出时间很早,伴随着较早一批设备本身的硬件限制,J2ME并没有完全的体现出智能应用的价值。
要知道,在那些设备上,本地代码的执行也很缓慢。
随着新一代移动设备的大量铺货,我们似乎看到了移动应用的春天正在一步步地走来。
J2ME作为最早提出的移动开发解决方案的价值也在逐步的凸现。
时下,移动开发技术大体分为三个阵营:
广泛得到各种设备支持的J2ME技术、以Symbian为代表的开放应用平台使用C++语言为主、微软的SmartPhone平台则使用C#配合.NETCF。
J2ME平台存在的基础是设备使用不同操作系统的多样性。
即使只剩下Symbian、Windows两种平台他们的对立也给了J2ME技术足够的生存的空间。
开发人员往往执著于不同的平台的种种优劣,然而让一种技术保持较长生命力的往往不是技术本身的优劣而是市场的作用。
希望本教程能为你进入移动开发的世界打下良好的基础。
本教程的合适的读者
本教程是为了学习J2MEMIDP技术的开发者准备的。
尽管本教程内容涉及初学阶段,但本教程不仅仅是一本入门的读物,很多的内容的详细程度对于有经验的开发者来说,也是很多脾益的。
事实上,本教程假定初学者已经有了一定的JAVA语言基础。
读者可以快速的从这里了解到他希望了解的关于J2ME的理论知识。
由于本教程针对MIDP2.5这一最新的标准,你可以了解到这一新规范中的API的强大功能与局限。
本教程附带了很多的例子,绝大多数情况你可以把这些例子用于你的项目。
并且为了方便读者快速上手,本教程对于开发工具有很多笔墨的描述。
你即使没有任何的开发平台的知识,也可以stepbystep的了解到如何搭建一个适用于你的开发平台。
当然如果你曾经有关于一个小项目的实践经验就更好了,你可以更系统的认识到哪里是重点。
本教程的内容
1J2ME的开发环境
1.1Java运行环境
java–version能显示出版本号
如果你的电脑已安装JDK,就不要再安装了
J2SDK1.4 下载地址
运行JDK的安装程序后会自动设置环境变量
注意环境变量的设置
JAVA_HOME=F:
\project\jdk1.5.0_08
PATH中必须有.;F:
\project\jdk1.5.0_08\;F:
\project\jdk1.5.0_08\jre\bin;
CLASSPATH=.;%JAVA_HOME%lib\dt.jar;%JAVA_HOME%lib\tools.jar;
如果向中国移动提交游戏,对游戏打包时JDK必须使用1.3.1版本(国际版)(见“百宝箱应用测试FAQ.doc”)
安装很简单,一路Next即可。
1.2安装Eclipse
Eclipse3.2.2 下载地址http:
//www.eclipse.org/
EclipseSDK3.2的安装工作只是一个解压缩的过程,将下面的zip文件解压即可,\J2me_software\02Eclipse\eclipse-SDK-3.2.2-win32.zip
1.3安装EclipseME插件
EclipseMe1.6.8 下载地址http:
//eclipseme.org/
启动Eclipse双击\eclipse-SDK-3.2.2-win32\eclipse\eclipse.exe
启动时,会提示选择workspace,默认取可
配置Eclipse增加java环境Window“Preferences”JavaInstalledJREsAdd,这一步不是必需的,如是有JRE就不加了
FileNewProject中没有J2ME,现在还无法创建J2ME项目,需要安装EclipseME
第1步:
Eclipse中选择Help->SoftwareUpdates->FindandInstall,
选中Searchfornewfeaturestoinstall,然后下一步。
如下图
第2步:
在下图选择NewArachivedSite,因为我们在这里使用的是eclipseme.feature_1.6.8_site.zip。
第3步:
选中eclipseme,程序在\J2me_software\03eclipseme\eclipseme.feature_1.6.8_site.zip
第4步:
在install窗口中会出现eclipseme.feature_1.6.8_site.zip,单击finish按钮继续安装,进入到EclipseME的安装界面。
第5步:
要选中eclipseme.feature_1.6.8_site.zip
第6步:
接受License
第7步:
显示Eclipse的安装位置,单击Finish
第8步:
确定后开始安装,在安装的过程中会弹出这样一个数字签名的确认窗口。
第9步:
继续安装,会出现以下窗口要我们重新启动Eclipse,重新启动后,EclipseME就已经安装好了。
为了验证EclipseME确实已经安装上了,我们在Eclipse重启之后,打开FileNewProject,可以看到在Project中有J2ME
注意:
安装好EclipseME之后,我们要对原有的Eclipse配置做一点小小的改动。
由于开发J2ME时我们需要首先启动手机模拟器,那么在Debug模式的Eclipse默认设置不等到模拟器启动就会失败。
修改这点很简单,在Window->Preference->Java->Debug中,取消暂停选项,还应该把超时时间提高到20000毫秒。
如下图所示,调试模式就可以顺利的启动了。
(这里不设置好,会影响以后Debug程序)
1.4安装手机模拟器
使用模拟器可以减少将程序传输到手机上次数
sun的开发包WTK2.2下载地址
EclipseME为我们提供了一个集成开发环境,但仅仅这些是不够的,我们还需要集成一种或多种手机模拟器来进行程序测试工作。
目前,各大手机厂商都拥有多种型号的手机模拟器,并且Sun也提供了一种通用模拟器。
这里我们采用SunWTK来为大家演示。
1.4.1加载SunWTKv2.2
WTK(Wirelesstoolkit)是Sun为无线开发者提供的一个无线开发实用包。
它拥有多个手机模拟器,我们在这里将WTK绑定到EclipseME,这将大大提高开发者的工作效率。
当前WTK的稳定版本是2.2,最新的版本是2.5。
在这里,我依然选择2.2。
安装过程也很简单,一路Next就可以了。
下面我将WTK绑定到EclipseME。
WindowPreferencesJ2MEDeviceManagement
先单击Browse,选中wtk2.2所在目录,然后单击Refresh,在Device中会出现四个Device,如下图红色,最后单击Finish按钮
在Devicemanagement中将DefaultColorPhone选中,将DefaultColorPhone设为默认模拟器。
然后单击OK
1.5导入现有的项目
File-->Import
如果项目报错了,请设置一下模拟器
先选中项目,右键properties,如下图
在J2ME这一项中,将Device中的Group设为“J2MEWirelessToolkit2.2”如下图
第1章J2ME技术概述
1.1什么是J2ME
1.2J2ME平台体系结构
1.3MIDlet应用程序的生命周期
随着移动通信的突飞猛进,移动开发这个新鲜的字眼慢慢成为开发者关注的热点。
在CSDN的最近一份调查显示,有24.34%的受访者涉足嵌入式/移动设备应用开发,这个数字可能略高于实际的比例,但也足可说明嵌入式/移动设备应用开发是一块诱人的新鲜奶酪。
J2ME(Java2MicroEdition)是嵌入式/移动应用平台的王者,Linux和WinCE分列二、三位。
Nokia等厂商力推的Symbian平台目前开发者占有率尚未达到满意水平,考虑到调查项合并了嵌入式设备(例如PDA)和移动设备(例如智能手机),Symbian、WinCE系列在移动平台上会是竞争的主要两方。
如果厂商能在标准实现上做得更加规范,则J2ME的跨平台特性会发挥得更加淋漓尽致,继续保有王者地位。
本章将从J2ME的体系结构和MIDlet应用程序模型。
1.1什么是J2ME
学习J2ME以前知道什么是J2ME是非常重要的。
J2ME是SUN公司针对嵌入式、消费类电子产品推出的开发平台,与J2SE和J2EE共同组成Java技术的三个重要的分支。
J2ME实际上是一系列规范的集合,由JCP组织制定相关的JavaSpecificationRequest(JSR)并发布,各个厂商会按照规范在自己的产品上进行实现,但是必须要通过TCK测试,这样确保兼容性。
比如MIDP2.0规范就是在JSR118中制定的。
可能接触过J2ME的开发者会觉得说J2ME是一系列的规范不准确吧。
因为我们在开发中用到了很多例如CLDC(ConnectedLimitedDevicesConfiguration)和MIDP(MobileInformationDevicesProfile)等内容。
其实这并不矛盾,因为这些就是在相关规范中制定的。
如果你还没有很好的理解这个问题,没有关系,请继续往下面看,我们开始认识J2ME平台的体系结构。
1.2J2ME平台体系结构
J2ME平台是由配置(Configuration)和简表(Profile)构成的。
配置是提供给最大范围设备使用的最小类库集合,在配置中同时包含Java虚拟机。
简表是针对一系列设备提供的开发包集合。
在J2ME中还有一个重要的概念是可选包(OptionalPackage),它是针对特定设备提供的类库,比如某些设备是支持蓝牙的,针对此功能J2ME中制定了JSR82(BluetoothAPI)提供了对蓝牙的支持。
目前,J2ME中有两个最主要的配置,分别是ConnectedLimitedDevicesConfiguration(CLDC)和ConnectedDevicesConfiguration(CDC)。
他们是根据设备的硬件性能进行区分的,例如处理器、内存容量等。
由于这个标准是在2001年的时候指定的,而现在移动终端的处理能力和内存容量发展很快,如果还按照这个标准来评判可能就不准确了。
因此我们只是列出标准,供读者参考。
本教程将主要讲解基于CLDC的J2ME平台的相关内容。
随着技术和硬件设备的不断发展,J2ME开发网将逐步推出基于CDC的J2ME平台介绍。
CDC的硬件参数:
●2M以上内存。
●具有网络连接能力,通常为无线网络。
●需要实现java虚拟机规范的全部功能。
●32位或者64位的处理器。
CLDC的硬件参数:
●512KB以下内存
●有限能源供应(通常使用电池)
●有限或非持续网络连接
●简单的用户界面
●16位或者32位的处理器
从上述的标准中我们不难看出CLDC主要针对那些资源非常受限的设备比如手机、PDA、双工寻呼机等。
而CDC主要面对那些家电产品,比如机顶盒、汽车导航系统等。
简表是以配置为基础的,例如MobileInformationDevicesProfile(MIDP)就是CLDC上层的重要简表。
与配置的纵向特性不同的是,简表是横向的。
下图是J2ME体系结构的框图:
J2ME体系结构框图
1.3MIDlet应用程序的生命周期
理解J2ME的体系结构并不像想象的那么容易,我们觉得读更多的资料帮助也不大,我们直接迈向J2ME开发也许会对你理解J2ME平台体系结构这个重要的概念有所帮助。
在MIDP中定义了一种新的应用程序模型MIDlet,它是被ApplicationManagementSoftware(AMS)管理的。
AMS负责MIDlet的安装、下载、运行和删除等操作。
在被AMS管理的同时,MIDlet可以和应用管理软件通信通知应用管理软件自己状态的变化,通常是通过方法notifyDestroyed()和notifyPaused()实现的MIDlet有三个状态,分别是pause、active和destroyed。
在启动一个MIDlet的时候,应用管理软件会首先创建一个MIDlet实例并使得他处于pause状态,当startApp()方法被调用的时候MIDlet进入active状态,也就是所说的运行状态。
在active状态调用destroyApp(booleanunconditional)或者pauseApp()方法可以使得MIDlet进入destroyed或者pause状态。
值得一提的是destroyApp(booleanunconditional)方法,事实上,当destroyApp()方法被调用的时候,AMS通知MIDlet进入destroyed状态。
在destroyed状态的MIDlet必须释放了所有的资源,并且保存了数据。
如果unconditional为false的时候,MIDlet可以在接到通知后抛出MIDletStateChangeException而保持在当前状态,如果设置为true的话,则必须立即进入destroyed状态。
下图说明了MIDlet状态改变情况:
MIDlet状态图
下面通过一个例子来验证MIDlet应用程序的生命周期:
importjavax.microedition.midlet.*;
importjavax.microedition.lcdui.*;
publicclassHelloWorldextendsMIDlet{
privateDisplaydisplay;
//构造函数
publicHelloWorld(){
display=Display.getDisplay(this);
System.out.println("Constructor");
}
publicvoidstartApp(){
System.out.println("startAppiscalled.");
Formf=newForm("HelloTest");
display.setCurrent(f);
}
publicvoidpauseApp(){
System.out.println("pauseAppiscalled.");
}
publicvoiddestroyApp(booleanunconditional){
System.out.println("destroyAppiscalled.");}
}
编译该程序后运行,控制台上就会依次输出:
Constructor
startAppiscalled.
当我们退出该程序时,控制台就会输出:
destroyAppiscalled.
对于详细的生命周期问题,读者可以查看其他教程或者本指南以后的更新的版本。
最后,简要说一下J2ME项目的开发流程作为本章的结尾。
开发流程一般是按照如下顺序:
编写源程序、编译为class文件、进行预校验、打包和发布应用程序。
关于详细的开发流程以及如何使用集成开发环境开发J2ME应用程序,将在其他章节介绍。