JAVA手机编程技术.pdf
JAVA手机编程技术1 引 言 随着通讯技术的发展及手机的普及,人们正在不断地给手机增加新的功能,其中,使手 机实现一般只有PC机才具有的功能下载各种程序并运行,是目前手机发展的一个重要方 向。为此,人们提出了各种各样的解决方案,其中基于JAVA的J2ME方案无疑是最引人 注目的。JAVA语言由于其平台无关、开放、网络功能强、面向对象、安全等特点,一经SUN公司提出,就随着Internet的发展而风靡全世界,在国外已成为软件开发人员的必修语言。特别是他的一次编写、到处运行的跨平台优点,对于手机领域来说更具有重要的意义。因 为目前手机的种类繁多,各种厂商都有自己的标准,如何使他们能运行同一种标准的程序成 为必须要解决的问题。采用JAVA语言后,各种手机只要实现JAVA虚拟机(JVM)就可以运 行JAVA程序,这种方法可以说是目前情况下最为理想的一种解决方案。J2ME(JAVA2MicroEdition)是用于嵌入式系统的JAVA,他是SUN公司对标准的JAVA版本J2SE做了最大程度的精简后得到的一种JAVA应用程序运行环境,在最简单的 情况下他只有几十kB,特别适合在手机、PDA等设备中使用。手机厂商如果在自己的手机 中实现了J2ME 规范,就可以从网络下载并运行JAVA程序,从而大大扩展了手机的功能。鉴于JAVA在Internet上取得的巨大成功,我们有理由相信,J2ME能够把这种成功延伸到 手持设备领域,为将来的手机和互联网融为一体提供有利的条件。JAVA手机的出现也给软件行业提供了新的机遇,能否给JAVA手机提供足够多的软件 资源是关系到其能否推广的重要因素之一。本文对J2ME构架做一个简单的介绍,并通过 一个具体的程序例子来说明JAVA手机程序的特点及开发过程。2J2ME概述J2ME是一种新的、非常小的 JAVA应用程序运行环境,他所定义的构架主要用于在手 持式设备上推广使用 JAVA技术。SUN公司将为各种硬件规模的设备提供合适的配置,这 些配置包括虚拟机、核心类库及API。目前,J2ME定制了2种配置:CLDC(ConnectedLimitedDevicesConfiguration)和CDC(ConnectedDeviceConfiguration)。其中,CLDC是为手机等CPU和内存资源远低于标准JAVA要求的设备所提供的一种配置,他是对JAVA标准版本做了最大程度的缩减后得到的,其虚拟机和核心类库多于100kB。CDC配置主要 用于拥有更多资源的下一代设备。CLDC配置给各种手持设备提供了能运行JAVA程序的一种环境,但开发者还很难在这 种环境下开发程序,首先因为 CLDC 核心库提供的是低级API,不适合直接用于构建应用 程序;其次,手持设备的系统结构千差万别,很难保证应用程序的图形界面、网络等功能的 移植性。因此,为了进一步增强J2ME的功能,SUN 公司允许设备供应商在实现 CLDC的 基础上再为自己的设备提供专门的高级API及程序管理方法,即PROFILE,以简化应用程 序的开发,使程序有更好的移植性。同时,SUN公司还与50多家知名的移动设备制造商及 软件开发商一起,制订了专门用于手机等移动信息设备的PROFILEMIDP(MobileInformationDevicePrOfile),由于 MIDP提供了编写图形界面、网络程序的统一规 范,并实现动态、安全的程序管理方法,因此得到了诺基亚、摩托罗拉、西门子等主要手机 厂商的支持,纷纷推出了基于 MIDP的 JAVA手机。与APPLET 相似,MIDP程序也称为MIDlet,他必须要继承一个特定的类MIDlet,这 样MIDlet管理者才能控制他的运行。这个类包含了startApp,pauseApp,destoryApp三 个用户可以重载的方法,分别在MIDlet进入运行状态、停止运行、退出时调用。MIDP程序的图形接口相对于标准JAVA的AWT 接口要简单得多,他分为低级API和 高级API。低级图形API使开发者能更直接地控制屏幕显示和键盘输入,他基于抽象类Canvas,一般用于编写游戏程序,他的可移植性要由开发者自己保证。高级图形API能在 不同设备之间有很好的可移植性,但开发者能调整的余地也相应地很小,他基于抽象类Screen,并有Alert,Form,List,TextBox四个具体的子类,这4 个子类分别表示警示框、表单、列 表框、文本输入框。另外,高级API还提供了许多图形组件,包括 Command,ChoiceGroup,DateFie1d,Gauge,ImageItem,StingItem,TextField等,他们都可以添加到A1ert和Form中。有些图形组件还提供了与AWT 相似的事件及事件响应处理方式。MIDP程序一般要和各种资源文件一起压缩成一个jar 文件。发布时,还需要有一个扩 展名为jad的描述文件,他包含了 MIDP程序的名称、版本、jar文件的位置及大小等信息。JAVA手机首先要访问的是描述文件,再根据描述文件的信息把 MIDP程序安装到本手机,然后才能运行。3 开发实例MIDP程序真实的运行环境是JAVA手机,但他的开发却是在PC 机上进行的,因此开 发环境一般都提供仿真器对程序进行测试。各种手机厂商都有自己的开发、测试环境,下面 介绍的例子程序,是在SUN 公司的 MIDP实现中调试通过的。3.1 程序功能 本例子包含2个 MIDP程序,第1个程序运行时要求用户输入姓名,并选择性别,然 后程序根据性别和当前时间向用户输出一句问候语。第2个程序运行时让用户选择图片名 称,然后把这幅图片在屏幕上显示出来。这2个 MIDP程序由同一个描述文件描述。3.2 程序源代码及注释3.2.1 第1个MIDP程序(sampleljava)importjavaxmicroeditionmidletMIDlet;importjavaxmicroedition1cdui*importjavautil*;任何 MIDP程序都要继承 MIDlet类,为了处理按钮命令,还要实现了CommandListener接口publicclasssamplelextendsMIDletimplementsCommandListenerprivateTextBoxinput;声明文本输入框privateFormselect;声明表单,用于放置各种图形组件privateAlertoutput 声明警示框Commandcfl,cf2,ct,ca;声明各种命令按钮ChoiceGroupsex 声明选择框Displaydisplay=null;声明屏幕显示对象publicsamplel()input=newTextBox(请输入您的姓名:,null,8,TextFieldANY);创建文本 输入框ct=newCommand(OK,CommandSCREEN,1)创建按钮ctinputaddCommand(ct);把按钮加到文本输入框inputsetCommandListener(this);设置按钮事件处理类select=newForm(请选择性别:);创建表单Stringstr=男,女;sex=newChoiceGroup(null,ChoiceGroupEXCLUSIVE,str,null);创建单选框,selectappend(sex)把单选择框加入表单cfl=newCommand(OK,CommandSCREEN,1);创建2个按钮cf1和cf2cf2=newCommand(回退,CommandBACK,2);selectaddCommand(cf1);把2个按钮加到表单selectaddCommand(cf2);selectsetCommandListener(this)设置按钮事件处理类output=newAlert(问候;,您好1,null,null)创建警示框outputsetTimeout(AlertFOREVER);设置超时为永远ca=newCommand(退出,CommandEXIT,1);创建按钮caoutput.addCommand(ca)把按钮 ca加到警示框output.setCommandListener(this);设置按钮事件处理类publicvoidstartApp()该方法在该 MIDlet得到执行权时调用if(display=null)display=DisplaygetDisplay(this);从系统得到这个 MIDlet的屏幕显示对象displaysetCurrent(input);把文本输入框input 显示在屏幕publicvoidpauseApp()该方法在该 MIDlet失去执行权时调用publicvoiddestroyApp(booleanunconditional)该方法在该MIDlet退出时调用inputnulloutput=nullselect=null/commandAction方法是CommandListener接口中定义的按钮事件处理方法publicvoidcommandAction(Commandc,Displayabled)if(c=ct)/如果按了ct按钮display.setCurrent(select)/则把表单select显示在屏幕if(c=cfl)/如果按了cfl 按钮CalendarrightNow=Calendar.getInstance()/得到当前时间intti=rightNow.get(Calendar.HOUR_OF_DAY)/得到当前时间的小时数(24小时制)intindx=sex.getSelectedIndex()得到用户在单选框中所选的项目号Stringhelo=null;Stringname=inputgetString();得到用户在文本框中输入的字符串 以下4句根据ti和indx的值构建不同的字符串heloif(ti=12&indx=1)helo=上午好!+name+小姐;if(ti=12&indx=0helo=上午好!+name+先生if(ti12&indx=1)helo=下午好!+name+小姐;if(ti12&indx=0helo=下午好!+name+先生outputsetString(helo)在警示框中加入字符串helodisplaysetCurrent(output);把警示框output显示在屏幕if(c=cf2/如果按了cf2按钮display.setCurrent(input)则把把文本输入框input显示在屏幕if(c=ca)A0果按了ca按钮,则调用destroyApp方法退出destroyApp(true)notifyDestroyed();322 第2个MIDP程序(sample2java)importjavaxmicroeditionmidletMIDlet;importjavaxmicroedition1cdui*;publicclasssample2extendsMIDletimplementsCommandListenerprivateFormform;privateListlist 声明列表框Commandcl=null;Displaydisplaynull;Stringdd图像1,图像2,图象3publicsample2()list=newList(TestList,Choice.EXCLUSIVE,dd,null)cl=newCommand(OK,Command.SCREEN,1)list.addCommand(cl)list.estCommandListener(this)publicvoidstartApp()displayDisplaygetDisplay(this)displaysetCurrent(1ist);publicvoidpauseApp()publicvoiddestroyApp(booleanunconditional)list=nullpublicvoidcommandAction(Commandc,Displayabled)Imageaa=null 声明图像对象aaif(c=cl)用户按了 cl按钮inti=listgetSelectedIndex()得到用户在列表框中所选的项目号try/创建图象对象,图象文件为tl.png,t2.png或t3.png,要和类一起压缩在jar包中aa=Image.createImage(/t+(newInteger(i+l).toString()+.png)catch(Exceptione)Formf=newForm(Test)创建表单 ff.append(aa)在表单中加入图像displaysetCurrent(f);把表单显示在屏幕上323 描述文件内容(samplejad)MIDlet1;Hello,samplel声明第1个 MIDlet程序,显示名为Hello,类名为samplelMIDlet2:Image,sample2声明第2个 MIDlet程序,显示名为Image,类名为sample2MIDletDescription:Sampleapplication 对MIDlet的描绘MIDletJarSize:11640Jar包的字节数,要根据实际情况修改MIDletJarURL:samplejarJar包的位置及名字,位置省略时表示与jad文件在同一位置MIDletName:MySamplesMIDlet的名字MIDletVendor:SunMicrosystems 供应商名字MIDletVersion:10 MIDlet版本33 开发过程(WindOWS2000平台下)(1)从SUN公司的网站下载 MIDP20版(http:vasuncomprOductsmidp),并解压到c:midp20fcs(2)从SUN公司的网站下载 JAVA标准版开发工具JDKl31,安装在c:jdkl3(3)建一工作目录,并把上述3个文件存人该目录(4)另外再找3个图像文件,转化为png格式后以tlpng,t2png,t3png的名字存入工作目录(5)进入 MSDOS方式,转入工作目录,设置以下环境变量:setMIDP_HOME=c:xmidp2OfcssetPATH=c:jdkl3bin;c:midp2Ofcsbinsetclasspathc:midp2Ofcsclasses(6)编译2个JAVA文件:javac*.java(7)用以下命令预先检查2个类:preverifydsample1preverifydsample2(8)把有关文件打成1个包:jarCVfsamplejar*pag(9)在仿真器中运行:midpC1asspathsamplejardescriptorsamplejad在完成仿真后,可以把samplejadd和samplejad放在某一网站,并用以下命令测 试:midpinstallhttp:samplejad下载并安装midprun1 运行,1表示所安装的第1个 MIDlet注:网站的 Web服务器要把jadd文件的 MIME类型设为textVndsunj2meappdescriptor,jar文件的MIME类型设为applicatiOn/javaarchive;若samplejad和samplejar放在不同位置,则samplejad中的MIDletJarURL属性要相应修改;可以输入 midp命令,然后用图形界面进行操作。4 结 语MIDPAPI还提供了 HttpConnection类,利用他可以很方便地与互联网的网站进行交 互,从而编写出功能很强的网络程序。随着JAVA手机的普及,迫切需要大量的应用程序资 源,各大手机厂商也给开发者提供了非常方便的开发工具,相信 MIDP程序的开发在不久的 将来能很快地流行起来。本文摘自现代电子技术