J2ME实验验指导书.doc_第1页
J2ME实验验指导书.doc_第2页
J2ME实验验指导书.doc_第3页
J2ME实验验指导书.doc_第4页
J2ME实验验指导书.doc_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

j2me程序设计-实验指导书实验1:j2me-eclipse ide的安装与配置实验目的:学会基本编程环境的安装与配置实验内容: 按照配置安装步骤,自行练习实验方式:教师指导为辅,学生自己动手为主实验步骤:1、下载安装eclipseme1.5 eclipseme1.5的下载地址:/sourceforge/eclipseme/eclipseme.feature_1.5.0_site.zip eclipseme1.5目前只有英文版,我已经在图片上把界面中的英文做了相应翻译。将下载下来的eclipseme1.5压缩包解压,解压后会有两个文件夹features和plugins。将两个文件夹内的内容分别拷贝到eclipse安装目录下的features和plugins目录下。这时启动 eclipse。2、配置eclipseme1.5 在此,我假设你已经安装了wtk。如果没有,请到sun公司的网站上下载。eclipse启动后点击窗口-首选项(如图1)。(图1)弹出(图2)显示的首选项对话框。如果eclipseme插件安装成功,则在对话框左侧的树中能够看到j2me节点。中选择j2me进行相关配置。step 1、设置wtk根目录点击左侧树中的“j2me”,出现如下图界面。这里唯一需要配置的是wtk root。在这一项中要填入wtk的安装根目录。例如,我的wtk安装在d:wtk22。其余的使用默认即可。值得一提的是antenna jar这一项。antenna jar不是一个必设项,但是使用antenna jar能够编写ant文件,轻松打包j2me程序。(有时间我会介绍如何用antenna jar编写打包j2me程序的ant脚本。)(图2)step 2、设备管理点击“device management”,出现(图3)配置界面。点击“browse”,选择wtk安装目录下的bin文件夹。例如我的bin文件夹的路径为d: wtk22bin。然后再单击“refresh”。插件会自动搜索出可用的设备。(图3)完成上面工作后,可以说你的j2me环境基本上就搭建好了。你可以在上面新建、编译、测试、打包你的程序了。怎么样简单吧?但是有一个问题,我们没有设置混淆器,不能使用“create obfuscated package”。混淆器对减小jar包大小,防止程序被反编译很有用,因此很有必要在j2me开发环境中设置混淆器。(图4)step 3、设置混淆器proguard 设置前请先下载proguard。目前proguard的最新版本是3.6beta(4.0正在开发中)。我用的是3.5。你可以在此下载到: eclipseme单击“obfuscation”,出现下图界面。在“progurd root directory”填入proguard的安装目录。(图5)好了,这样你的j2me开发环境就搭建好了,你可以开始用eclipse进行j2me开发了。实验2:用命令行环境开发midlets实验目的:学会使用wtk工具开发j2me程序实验内容: 按照实验步骤,开发一个基于命令行的j2me程序实验方式:教师指导为辅,学生自己动手为主实验步骤:1 什么是j2me wireless toolkitwtk 的全称是sun j2me wireless toolkit sun的无线开发工具包。这一工具包的设计目的是为了帮助开发人员简化j2me的开发过程。使用其中的工具可以开发与 java technology for the wireless industry (jtwi, jsr 185) 规范兼容的设备上运行的j2me 应用程序。该工具箱包含了完整的生成工具、实用程序以及设备仿真器。到本文写作时为止可以获取有四个版本,分别是1.0.4, 2.0, 2.1和2.2。每个版本都包括英语,日语,简体中文,繁体中文4个语种包。1.0.4版只能够开发midp1.0 应用程序。2.0 版只能够开发midp2.0 应用程序。2.1版则可以同时开发midp1.0、 jtwi(cldc 1.0, midp2.0, wma1.1)可改用cldc1.1或加入mmapi1.1),自定义(自己随机组合configuration, profile以及optional package)三种环境下的应用程序。2.2版中,wtk全面的支持jtwi规范。具体的说,即midp 2.0, cldc 1.1, wma 2.0, mmapi 1.1, web services (jsr 172), file and pim apis (jsr 75), bluetooth and obex apis (jsr 82), and 3d graphics (jsr 184);同时您也可以使用该版本开发面向cldc1.0 和midp1.0的应用程序。系统要求上,wtk2.2至少需要 50mb可用硬盘,128mb系统ram和800mhz pentium iii cpu。你可以在sun的官方网站免费下载。wtk2.2 下载链接:wtk是sun提供的一个开发工具包。目前各大手机厂商往往把wtk经过自身的简化与改装,推出适合自身产品,如sonyericsson,nokia developers suit等,都属于此种类型;而通过jbuilder, eclipse等ide,j2me开发包工具可以被绑定在这些集成开发环境中,进一步提高开发效率。2 j2me wtk的内容和目录结构2.1 安装过程在说明wtk文件结构之前,让我们首先把它安装起来。wtk的安装程序与普通程序一样简单,只有一点需要注意,由于wtk自身并没有附带java的运行环境jdk,所以,在wtk安装之前你需要安装自己的 jdk(我们这里选用的是jdk1.4.2)。wtk会首先自动检测当前系统已有的java虚拟机,然后显示出当前虚拟机所在路径您在确定无误后,就可以继续了,最后安装成功后,您将得到一个包括多种实用工具的开发包。以下是安装显示的菜单项。2.2 目录结构无论哪个版本的wtk都会包括以下几个目录:appdb目录: rms数据库信息apps目录: wtk自带的demo程序bin 目录: j2me开发工具执行文件docs目录: 各种帮助与说明文件lib目录:j2me程序库,jar包与控制文件session目录:性能监控保存信息wtklib目录: jwtk主程序与模拟器外观wtk 是用来开发midp的,为了让midlet可以顺利编译和执行,wtk必须具有cldc和midp的类库,wtk可以帮助我们省去额外安装调试这些类库的时间。而不同版本的wtk包含的程序库内容是不一样的,比如说2.0中包含了midpapi.jar, wma.jar, mmapi.jar,而在2.1中则变为了cldcapi10. jar, cldcapi11.jar, midpapi10.jar, midpapi20.jar, wma.jar以及mmapi.jar;在2.2中,wma.jar又细分为wma11.jar, wma20.jar。如果您在开发中需要某个特定的jar包而当前的wtk版本又没有时,您可以简单把这个jar包拷贝如当前wtk的lib文件夹即可。apps 目录中包括了许多demo程序,为我们演示了j2me的一些技术实例,这些往往是很好的学习材料。3 使用j2me wtk创建工程3.1 建立新项目下面让我们用wtk来创建一个经典的hello world程序,看看这水有多深。在 wtk的程序列表中运行ktoolbar,打开wtk主界面。wtk的标题菜单简单明了的列出了这个工具包的可选功能。单击新建项目,键入新建的项目名和启动midlet名,这里的项目是一个midlet套件,而midlet类名则是这个套件的入口,midlet文件名 (也是java文件的名字)。产生项目以后,会出现项目的设置表,您可以选择当前目标平台,cldc配置,以及要采用的midp可选包。再不需要某个库文件时,请不要选中它,以减少最后程序大小。另外,您还可以指定midlet的属性,这些设置将成为jad,即j2me程序的描述信息文档。我们的hello world目前不需要其它的附加设置,于是采用默认,确定之后,控制台信息提示建立成功。wtk产生项目后,不同类型的资源有着相对固定的存放位置。java源文件被放在apps目录下hello worldsrc下,相关程序资源文件(图片,音频)放在hello worldres下,应用程序库文件放在hello worldlib下,这在wtk中是必须注意的,即便是相对路径,也必须是在该类型目录下建立。项目创建成功后,我们来创建一个 midlet文件,midlet是j2me项目文件的入口文件,也是必须的。在hello worldsrc目录下创建helloworld.java,采用默认包,注意,此时创建的java程序必须是与我们在创建项目时键入的midlet类名一致。在新创建的java文件中输入代码,下文是一个简单的form程序。/helloworld.javaimport javax.microedition.lcdui.*;import javax.microedition.midlet.midlet;public class helloworld extends midlet display display; public helloworld() super(); display = display.getdisplay(this); protected void startapp() form form = new form(hello world!); form.append(welcome to j2me world!); display.setcurrent(form); protected void pauseapp() protected void destroyapp(boolean arg0) 完成后保存java文件,单击“生成”按钮,由wtk为您进行编译,如果有错误生成,则会在控制台中提示。根据提示信息对 midlet文件进行修改,再重新生成,直到编译成功。对编译成功的程序,你可以从“设备”选项中选择 defaultcolorphone,defaultgrayphone或者其它wtk自带的设备模拟器,单击按钮可以看到弹出一个手机模拟器,显示出我们的第一个hello world程序,如果执行有错,依然会在控制台中给出提示信息。运行成功以后,在 helloworld/bin目录下,将会产生一个程序描述文档jad,它清楚的描述了当前midlet的名称与版本,发行人,指定的jar包名称与大小,支持cldc与midp版本等信息。在进阶开发中,默认的联网字符串,签名私钥等信息也可以保存在这个描述文档中。3.2 开启旧项目当我们下一次重新启动wtk的时候,选择打开项目,wtk会把自身apps目录下的应用项目全部显示出来,包括我们刚刚建立的hello world,选择“打开项目”后,就能够对apps目录下的midlet项目进行开发更改了。4 执行midlet、打包和混淆4.1 执行midlet除了我们刚刚介绍的在ktoolbar中执行一个程序,我们还可以在程序组中直接选择run midp application, 这是就可以在弹出的对话框中选择其它路径中的jad程序运行了。当我们直接选择运行时,需要注意两个问题:1. jad描述文件与其指定的jar文件在同一个目录下。2. 运行目录路径中不要包含中文。4.2 打包成jarktoolbar的生成功能只能帮我们将源代码编译并预先审核,并不会帮我们产生jar文件,而我们如果要发布midp程序,除了jad描述文件,jar 是必须的,这就需要打包。在ktoolbar选中项目 包 产生包,可以把整个程序,包括资源文件打包成jar文件。形成的jar保存在appshelloworldbin目录下。4.3 包混淆在上面的操作中,我们看到,除了“产生包”,另外还有一个“产生混淆包”选项。所谓混淆,是为了防止别人反编译后读取源代码,将程序(.class文件) 进行混淆,经过混淆的java byte code可以增加别人反编译的时间。这里我们使用开源的proguard,关于混淆的详细介绍和混淆工具的下载,见本教程的前面的章节。把刚刚获取的proguard解压,在解压目录的lib子目录中找到proguard.jar文件,将其拷贝到wtk安装目录的bin下,再执行混淆包。这是我们将会发现appshelloworldbin下的jar大小变小了,反编译后的各个名称也变得毫无意义了。5 wtk中其它值得关注的功能到这里,我们就如何用wtk创建,执行,打包,混淆一个midp项目做了比较详细的介绍。除了以上所说各点,wtk(2.2版)还提供诸多实用功能。这些都可以在编辑 偏好中找到。例如,当我们需要监视程序性能的时候,可以选中“启用内存监视器”,在下一次模拟器执行的时候,我们就可读出程序运行时的内存消耗均值,消耗峰值以及具体产生对象的个数和使用情况。除了内存监视,我们还可以执行网络监视,设定存储区大小和堆栈大小,设定安全签名和蓝牙操作属性,以尽可能模拟手机实际运行环境,这些功能在进阶开发中都是非常实用的。注意:虽然wtk为我们提供了各种工具来模拟手机运行环境,但在实际开发中,由于受到手机硬件,网络条件等诸多限制,midp的真实性能在不同机器上会出现不同的反应,与wtk中的表现可能差别更大。从菜单中选择“工具集”可以看到更多的实用工具,这些都是开发实用的j2me程序时会频繁使用到的。 实验3:用eclipse开发midlets实验目的:学会使用eclipse工具开发j2me程序实验内容: 按照实验步骤,开发一个基于ide的j2me程序实验方式:教师指导为辅,学生自己动手为主实验步骤:1.打开 eclipse-文件-新建-其他-j2me midlet suite在j2me midlet suite-新建j2me midlet2.创建helloworld.java复制一下代码import javax.microedition.lcdui.display;import javax.microedition.lcdui.textbox;import javax.microedition.midlet.midlet;import javax.microedition.midlet.midletstatechangeexception;public class helloworld extends midlet /textbox类对应文本框,用于控制文本的输入,并显示输入public textbox textbox;public helloworld() super();protected void destroyapp(boolean arg0) throws midletstatechangeexception / 当程序结束时,系统调用该方法protected void pauseapp() / 当程序暂停时,系统调用该方法protected void startapp() throws midletstatechangeexception / 新建一个名为“测试程序”的文本框,文本框内默认输入“hello world”, / 参数20表示允许输入的字符个数, 参数0表示没有特殊的输入限制 textbox = new textbox(雨季醉清风测试程序, hello手机软件编程!梦想起飞的地方!, 20, 0); /调用自己填写的myadd接口。 myadd();/自己加入的新接口public void myadd() / 将textbox设为屏幕当前显示的对象 display.getdisplay(this).setcurrent(textbox);运行配置控制台信息运行结果实验4:使用ant管理器管理项目实验目的:学会使用ant管理工具管理j2me项目实验内容: 按照实验步骤,开发一个基于ant的j2me工程实验方式:教师指导为辅,学生自己动手为主实验步骤:antenna与j2me打包 众所周知,j2me平台受限于各厂商对kvm的实现不同。此外,由于不同终端性能的差别,j2me开发中的 机型适配是相当繁琐的工作。当然,对于该难题,有很多种解决方案。例如,可以使用j2mepolish,这里主要讨论如何使用antenna来解决这个问题。 antenna介绍 antenna是基于ant的j2me开发工具。可以使用antenna对j2me程序进行 编译、校验、打包、混淆等,甚至可以通过antenna所定义的task,运行已经打包完成的jar;还可以将打包完成jad和jar部署到ota服务器上。以上功能,只是对ant的扩展,在我以前的文章使用ant对j2me程序打包也讨论。其实,以上所说的功能,直接使用ant也能实现,只是antenna对这些task进行了扩展,使得对j2me程序的打包过程更加的傻瓜话罢了。貌似,话说到这里有些自相矛盾了,既然这些功能ant都能实现,还介绍antenna干嘛呢?其实,本人最推崇antenna的,不仅是它对j2me打包过程的简化,而且特别赞赏它对预处理的支持。除此之外,antenna的预处理,结合了j2mepolish所提供的device.xml数据库,就是说,我们也可以像在j2mepolish中那样,对源程序进行相关的处理,以达到多机型时配的要求。 antenna中的预处理 antenna中的预处理原来与j2mepolish等支持预处理的软件一致,都是在编译之前,对代码中定义的预处理脚本进行处理,并生成符合脚本定义规则的代码。 在antenna中,通过“wtkpreprocess”task来进行预处理。关于预处理脚本的定义,请参考antenna自带doc中的wtkpreprocess.html。此外,本文讨论的preprocessor是指新版的preprocessor,即version=2,原来的预处理机制不在本文讨论范围之内。 下面举例说明,如何通过在代码中定义脚本获取终端相关信息,类似于使用j2mepolish的build和preprocess功能一文中的例子,感兴趣的朋友可以结合起来学习。task定义如下:xml 代码 其中,device为制定的机型型号,而printsymbols用于标示,是否在处理过程,将所有的标记打印出来。出于学习和调试目的,最好设置为true 源代码片断:java 代码public class mycanvas /#if nokia-uijavapackage /# extends com.nokia.mid.ui.fullcanvas /#else extends canvas /#endif /#ifdef key.leftsoftkey /#expand public final static int key_soft_left = %key.leftsoftkey%; /#else public final static int key_soft_left = 6; /#endif /#ifdef key.rightsoftkey /#expand public final static int key_soft_right = %key.rightsoftkey%; /#else public final static int key_soft_right = 7; /#endif int screenwidth = getwidth(); int screenheight = getheight(); public mycanvas() / #if !(nokia-uijavapackage) /# setfullscreenmode(true); /#endif protected void paint (graphics g) /#ifdef screensize /#expand string screensize = %screensize%; /#else string screensize = 128x128; /#endif g.setcolor(0); g.fillrect(0, 0, screenwidth, screenheight); g.setcolor(255,255,255); g.drawstring(screensize, screenwidth/2, screenheight/2, 0); 如此一来,就可以通过antenna中的预处理机制,解决多机型之间,键值不同,屏幕大小不同,扩展api不同等问题。 注意,device.xml中,有些数据并没有安全定义。例如,各终端的导航键值就没有定义。可自行添加到device.xml中,然后覆盖原来的antenna包中的device.xml即可。 目录结构定义 在打包过程中,对整个工程的目录设置如下,具体体现在build.xml中src 源码目录res资源目录build -classes 编译后的class文件以及从res复制过来的资源文件 -deployedjar和jad文件dist预处理后的java文件ant脚本 按照以上分析,build.xml文件定义如下:xml 代码 target target target starting compileecho build from all the $dir.src to $dir.classesecho wtkbuild target copy wtkjad wtkpackage target 注意:如果是在eclipse中使用ant 来运行build.xml,请注意ant_home路径的设置,且确认ant_homebin目录下存在antenna包。 软件版本 apache-ant-1.7.0antenna-bin-0.9.15-beta.jar实验 5:了解j2me midlet程序结构实验目的:了解j2me midlet的程序结构及生命周期实验内容: 按照实验步骤,开发一个简单的midlet实验方式:教师指导为辅,学生自己动手为主实验步骤:jam jam(java应用管理器)。java应用管理器是管理java 应用的机制。jam的规范主要由目标环境决定,与java规范无关。 jam管理应用在手机上的生命周期,其功能包括:鉴定概要、解析jad(应用描述文件)、应用安装、应用更新、应用列表、应用执行。 jam还管理jar文件和jad文件。jar是java应用档案文件,jad是java应用描述文件。此外,jam还有管理java虚拟机的功能。 - jar和jad jad(java application descriptor)是java应用程序的描述性文件,它所表述的内容很多,比如游戏提供商、游戏的版本号、游戏文件的大小等等,当然还有jar的地址。 jar是一个压缩的文件,在文件中包含了运行游戏的class代码和资源文件(图片、声音文件等等)。 一个完整的midp应用程序是由一个jad文件(纯文字文件)与jar(zip压缩档)所组成。jad与jar之间的关系 : jar执行文件 jad签名、描述文件 在手机上安装游戏的时候,手机首先来找到jad文件,通过jad文件来解析jar文件。也就是说,任何的手机游戏在真机上只需要这两个文件,即jad和jar文件。 并非每种装置在安装时都要求同时有jad与jar,有些装置只需要jar即可。不过,有jad和没有jad的j2me应用程序在安全性上是有差异的。 - midp 一个midp应用程序称作midletmidp小应用程序,它不能够单独地运行,必须运行在特定的环境之中,或者说运行在一个容器中。可以把这个容器看作是个大的应用程序,它运行在java虚拟机之上,但不能完成任何特定的任务,因此需要程序开发者编写代码以完成一项工作。 通过这种形式,程序开发者就从各种运行环境、各种设备中解放出来,只需设计一个midlet,就可以在不同的环境上运行。比如不同的厂家、不同型号的手机,只要它支持j2me、支持midp,就有这样一个容器。 midlet中这个容器就是midp实现,它以sun公司发布的cldc规范和midp规范为标准,然后针对设备进行移植,从而提供给所有的midlet都一样的容器内部接口。编写midp应用程序的要求就是必须扩展midlet类 。 当java应用管理器将midlet装载进来,会生成一个midlet对象实例,该对象的生命周期完全由java应用管理器控制,在需要改变midlet对象状态的时候,由java应用管理器会调用midlet中对应的函数对这个对象进行控制。 midlet 程序开发的基本方法: 编写源代码,生成.java文件。 编译、预校验,生成.class文件。在模拟器上运行并测试。 打包生成jar文件。 下载到真机上测试。 midlet 程序开发的基本方法:j2me手机游戏开发-midletmidlet生命周期 当jam需要改变midlet状态的时候,需要调用对应方法,在方法调用成功以后,midlet的状态最终才会发生改变。midlet生命周期示意图: j2me手机游戏开发-midlet除了jam可以改变midlet的状态,midlet自身也可以调用一些方法,改变自身的状态。然后再通过notify的系列函数通知jam,midlet的状态需要进行改变。 示意图:j2me手机游戏开发-midlet一个midlet对象有三个状态,分别是:运行状态、暂停状态、中止状态。 jam通过调用startapp()函数使midlet进入到开始状态,也就是说把我们的游戏进入开始状态;jam通过调用pauseapp()使midlet进入暂停状态;通过调用destroyapp ()使之停止。 midlet不允许直接调用system.exit()或runtime.exit()来结束midlet的生命周期,这种方式会引起java的安全异常。当midlet需要自己结束生命周期的时候,首先调用destroyapp(),然后通过notifydestroyed()通知jam结束midlet的运行。 - midlet应用程序实例:复制到剪贴板java代码1. /*引用包* 2. *悠宝移动应用平台 3. * 4. */ 5. importjavax.microedition.midlet.*; 6. importjavax.microedition.lcdui.*; 7. 8. publicclasstestextendsmidlet 9. 10. privatedisplaydisplay; 11. 12. publicvoidstartapp()/运行线程 13. display=display.getdisplay(this); 14. textboxt=newtextbox(悠宝移动应用平台,欢迎您来到悠宝移动应用平台,20,textfield.any); 15. /*textbox(stringtitle,stringtext,intmaxsize,intconstraints) 16. 创建textbox类的新实例,其中,title是文本框的标题,text是文本框的文本, 17. maxsize是允许输入到文本框中的最大字符数,constraint标识了对字符的约束条件;*/ 18. display.setcurrent(t); 19. 20. 21. publicvoidpauseapp()/暂停线程 22. 23. 24. publicvoiddestroyapp(booleanunconditional)/线程结束 25. 26. 例子程序见:midlet.rar实验6:用户界面设计了解实验目的:掌握j2me 用户界面的程序设计实验内容: 按照实验步骤,开发一个简单的用户界面实验方式:教师指导为辅,学生自己动手为主实验步骤:所谓低级图形用户界面,指的是那种我们可以自己在上面画图的控件,它是和textbox,list等等这些用户控件刚好相对的概念,因为这些用户控件的形状是事先画好的,无需我们程序员操心,所以称为高级图形界面。低级图形用户界面什么东西都需要我们自己画,所以比较复杂,当然也更加灵活,只有想不到,没有画不出,所以我们先介绍它。在j2me开发中,低级图形用户界面是由javax.microedition.lcdui.canvas类实现的,我们只要继承这个类,并实现这个类的paint方法,就可以随心所欲的进行绘画了。当然,绘画之前,我们少不了要了解我们的手机屏幕究竟有多大的画图空间,这可以通过调用canvas类的getwidth和getheight方法实现。下面是一个简短的程序,向大家演示了怎么获画布的大小,同时,也算是一个小小的框架。首先,当然是创建我们自己的画布,代码如下:package com.xkland.j2me;import javax.microedition.lcdui.canvas;import javax.microedition.lcdui.graphics;/* */* author 海边沫沫*/public class mycanvas extends canvas /* */* creates a new i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论