追求卓越、严以自励、诚挚服务JavaMe简明培训资料1、JavaMe环境搭建1)jdk1.62)Eclipse3.x3)WTK4)EclipseME插件以上是开发基于Eclipse环境所需的一些安装环境,其中jdk和eclipse不介绍其安装方法了,重点介绍一下wtk和eclipseme插件的安装。一、WTK的下载及安装WTK的下载地址为:直接选择SunJavaWirelessToolkit2.5.2forCLDC进行下载即可,下载完成后一路NEXT安装即可,但注意要看一下WTK的安装路径,以便在作设备导入时要用到。点击这里下载WTK追求卓越、严以自励、诚挚服务二、eclipseme下载及安装Eclipseme的安装方式可使用下载插件站点ZIP包后,在本地安装,也可直接使用插件网址安装的方式。(插件安装网址)Eclipseme插件下载下载地址选择eclipseme.feature_1.7.9_site.zip进行下载,下载完毕后进行安装。eclipseme插件安装步骤如下:help--softwareupdates--Findandinstall-SearchfornewfeaturestoinstallNewArchivedSite--选择刚才下载的zip文件然后一路NEXT即可。三、JavaME配置在eclipseme插件和wtk2.5.2安装完毕后,需要将wtk的设备导入ecliipse中,操作方法如下:Window-Preferences-J2ME-DeviceManagement-点击Import按钮追求卓越、严以自励、诚挚服务然后选择Browser选择刚才安装的wtk的完整路径如:C:\WTK25如下图选择路径后再点击Refresh,就可以发现找到了一些设备。这些设备其实就是WTK提供的虚拟终端设备,这里选择不同的终端,在项目调试运行时就显追求卓越、严以自励、诚挚服务示相应的虚拟终端了。2、JavaME程序结构1)程序结构其中src为项目的源代码部分,res文件夹为资源文件夹(可放置XML文件、图片资源等),deployed为项目打包后存放的文件夹,xxx.jad为本项目的配置文件。2)程序流程直接使用wtk自身ui开发软件的流程为新建midlet-创建Display-创建用户界面-设置当前显示给用户的界面可以直接显示给用户的界面为继承自javax.microedition.lcdui.Displayable而在每个继续自Displayable的UI界面又可添加继承自Item的控件,添加Command,Image,String等界面元素。如:LIST,FORM均继承自Displayable类所以,他们可以通过display.setCurrent(x)进行用户界面的切换。3、HelloWorld演示使用midp/cldc规范wtk自身UI控件开发示例4、发布项目直接右击项目选择J2ME-CreatePackage即可,发布完成后可在项目的deployed找到发布过的xxx.jar和xxx.jad文件,将这两个文件拷到手机终端上即可进行安装。追求卓越、严以自励、诚挚服务5、Lwuit框架介绍1)UI框架介绍由于采用midp,cldc规范内的UI进行开发,界面较简陋,对UI的更新维护麻烦,而且由于不同厂商不同机型对midp,cldc的ui规范实现不一致,导致我们采用midp/cldc开发的应用软件在不同手机终端上显示的效果大相径庭,目前出现了很多第三方的UI开发框架,它们的出现正是为了解决以上所述的诸多问题。利用这些UI框架开发的JavaMe软件在界面一致性、扩展性、良好的MVC结构模式等方面带来了很多的好处。较有名的JavaMEUI有:lwuit、kuix、polish等UI开源框架。Lwuit使用res主题资源包的形式提供用户对UI的变更和维护,lwuit本身自带了资源编辑器通过,资源编辑器可以很方便的对软件的皮肤进行修改和升级。而polish和kuix框架则是使用外置css文件的形式,使用户可以方便的对软件界面,在不修改代码的情况下,进行平滑的软件用户界面升级和维护。Lwuit是由sun公司开发并推荐的第三方JavaMEUI界面框架包,使用方便,而且lwuit经常更新,使用此框架在改善软件结构(主要是MVC结构)、用户体验、保证足够的学习资源等方面有较大的优势。Lwuit的开发方式和CS应用软件一样采用事件驱动的方式进行编程及响应用户的操作。它类似于swing的开发模式。2)lwuit下载Lwuit下载地址为:,目前最新版为1.3版3)lwuit包介绍追求卓越、严以自励、诚挚服务下载LWUIT_1_3.zip并解压后得到如下目录,其中:docs为本框架的使用说明,里面有两个pdf文档为lwuit使用入门教程,另外docs/javadocs为框架详细的API说明文档。Lib为lwuit的发布包,要在自己的JavaME项目中使用本框架只须将它加入本项目并设置一下JavaPath信息即可。LWUITDemo、LWUIT-Makeover文件夹为lwuit的示例项目。Uitl文件夹则是lwuit提供的进行资源编辑的工具。4)lwuit开发HelloWorldLwuit只用到cldc的midlet,其它的组件均自己重新实现,我们要创建lwuit界面应用,仍然是以midlet作为程序的入口。6、Floggy框架介绍1)floggy介绍Floggy下载网址为:是一个基于midp/cldcRMS实现的持久化框架。它能方便的以对像的形式进行数据的存储操作。使用简便、框架稳定。可以方便的对所有实现追求卓越、严以自励、诚挚服务net.sourceforge.floggy.persistence.Persistable接口的POJO类进行对像类的存储和读取。2)floggy插件安装Floggy的eclipse插件下载网址为,可直接使用eclipse的Remotesite方式直接进行本插件的安装。3)使用floggy框架在floggy插件安装完成后,要想在某个JavaME项目中使用floggy框架也非常简单,直接右击要添加floggy框架的项目,然后选择Floggy-AddFloggynature即可如下图所示:然后即可在项目的引用中看到FLOGGY的相关信息如下图所示:追求卓越、严以自励、诚挚服务4)资料Floggy网站上有完整的数据存储示例如下:)floggy使用说明使用floggy最大的好处就是可以直接对所有普通的POJO类进行保存和读取操作,而用户完全不需要去熟悉SQL,floggy相当于在JavaME端的ORM框架。以下是使用说明:PO类所有要通过floggy进行保存的对像均可以是普通的POJO类,但此类有两个条件,一个是该PO类必须实现net.sourceforge.floggy.persistence.Persistable接口,另一个条件是必须有一个默认的构造方法(无参),另外如果某PO类中的某些属性不需要进行持久化,则可用transient进行修饰,则floggy在对po对像进行持久化时,不保持相应的属性。例如以下PO类可直接使用floggy进行持久化和读取操作的示例类:importnet.sourceforge.floggy.persistence.Persistable;//所有要进行持久化的PO类须实现Persistable接口publicclassConfigimplementsPersistable{追求卓越、严以自励、诚挚服务privatebooleanisOnline=true;privateStringrobotNumber;//机器码privateStringrobotReg;//注册码//短信认证接入号privatetransientStringsmsPhoneNum;//发送机器码前缀privatetransientStringsmsContent;//这个默认无参构造方法必须有publicConfig(){}//省略所有属性的GETTER和SETTER的代码}上述PO类中有加transient修饰的属性将不会持久化保存。增加C(Create)Personp=newPerson();p.setName(...);p.setBirthday(...);p.setGender(...);p.setPhones(...);try{PersistableManagerpm=PersistableManager.getInstance();//AnewobjectIDisgenerated.//Youcanuseitinfutureoperations.//在对像保存时会生成一个自动ID,你可以使用此ID进行后续操作intid=pm.save(p);}catch(FloggyExceptione){...追求卓越、严以自励、诚挚服务}查询R(Retrieve)PersistableManagerpm=PersistableManager.getInstance();ObjectSetpersons=pm.find(Person.class,null,null);for(inti=0;ipersons.size();i++){Personp=(Person)persons.get(i);...}pm.find有三个参数一个是class一个是查询条件也就是相当于where,最后一个参数为排序。如果对Person.class的查询是有条件的且需要对结果进行排序,则可以使用如下Vectorlist=newVector();try{ObjectSetpersons=pm.find(Person.class,newFilter(){//查询姓名等于毛冬冬的人publicbooleanmatches(Persistablearg0){Personp=(Person)arg0;returnp.getName().equals(毛冬冬);}},newComparator(){//这里是排序arg0和arg1分别是读取的两个相邻的对像//可以返回PRECEDES,FOLLOWS,EQUIVALENT这三个的意思大致是往前挪,往后挪,不动publicintcompare(Persistablearg0,Persistablearg1){returnEQUIVALENT;}});//遍历列表并添加到VECTOR中for(inti=0;ipersons.size();i++){Personperson=newPerson();/*Thesameinstanceisusedtoloadthedata.Thisavoid*thecreationofpersons.size()-1objects.*/persons.get(i,person);追求卓越、严以自励、诚挚服务//Don'tusethepersonreferenceoutsidetheloop,onlyitsdata.//BADlist.addElement(person);}}catch(FloggyExceptione){e.printStackTrace();}修改U(Update)try{PersistableManagerpm=PersistableManager.getInstanc