Java语言程序设计第12章J2ME程序设计基础主讲:张思民清华大学主要内容•J2ME的基础知识:•(1)J2ME概述、•(2)建立J2ME开发环境、•(3)J2ME应用程序设计、•(4)数据记录管理系统•(5)开发网络应用程序J2ME概述1、Java语言三个核心开发平台Java2PlantformEnterpriseEdition(J2EE):用于开发企业服务器端应用程序。•Java2PlantformStandardEdition(J2SE):用于开发一般台式计算机应用程序。•Java2PlantformMicroEdition(J2ME):用于开发嵌入式、信息家电产品应用程序。2、CDC和CLDC•CDC(ConnectedDeviceConfiguration):用于内存及电力等资源相对丰富的信息家电产品,如电视机顶盒、网络电视等,所用的Java虚拟机JVM为CVM。•CLDC(ConnectedLimitedDeviceConfiguration):用于内存及电力等资源相对贫乏的信息家电产品,如手机、PDA等移动设备,所用的Java虚拟机JVM为KVM。CLDCCLDC包含了一个基本的J2ME运行环境,其中包括虚拟机和核心的java类库。CLDC的核心是虚拟机和核心类库。虚拟机运行在设备的操作系统之上,对下层的硬件提供必要的兼容和支持;核心类库提供操作系统所需的最小的软件需求。CLDC对J2SE类库进行了大量的简化,其类库只保留了java规范中定义的最核心的3个包,即java.io、java.lang和java.util,并重新定义了一个新的包javax.microedition。在J2SE的Windows平台,运行一个简单的“Hello,word”应用程序需要16MB的内存。3、MIDP规范•MIDP规范包括硬件和API两部分:•(1)硬件部分•内存:128KB内存供MIDP组件使用;•32KB内存供虚拟机运行时用;•8KB内存供数据持续存储时用;•显示器:屏幕大小为96*54像素,屏幕高宽比为1:1。(2)API部分:用户界面的支持:提供类程序包javax.microedition.lcdui。网络的支持:提供类程序包javax.microedition.io。数据持续存储的支持:提供的类程序包javax.microedition.rms。游戏功能的支持:提供的类程序包javax.microedition.game。J2ME开发环境建立J2ME开发环境Sun公司的J2MEWirelessToolkit2.2(WTK22),这是J2ME的无线开发工具包。J2ME的目录结构J2ME程序的开发运行Ktoolbar:KVM的组成部分目录包含的内容api发行版提供的Java库源代码bin所有的可执行的二进制代码和Java类库butild编译KVM的Makefiledocs所有文档jamApplicationManager(JAM)部件源代码kvm包含了KVM的源代码tools提供的许多工具的源代码关于KVM虚拟机•KVM是千字节虚拟机的缩写,KVM最小只需要160K内存,其中128K用于KVM本身以必需的类库。•KVM的设计理念是:(1)微小化核心:这个核心在40K到80K左右。(2)可移植:将与底层操作系统相关和无关的代码分离,具有高可移植性。(3)模块化以及客体化J2ME应用程序设计12.2应用程序的基本结构•1、用户界面管理类Display•用户界面设计(UserInterface,UI)是应用程序与用户沟通的桥梁。J2MEMIDP提供的用户界面都包括在javax.microedition.lcdui的类程序包里。•所有的可视组件(Displayable)都是通过显示管理类Display来显示的。对于每一个MIDP应用程序,都有一个Display类对象,该对象控制MIDlet程序中所有的显示对象。•Display是表演的舞台,要使组件能在屏幕上显示,必须取得这个舞台:Displaydisplay=Display.getDisplay(this);•创建一个Display对象,只能使用Display类中的静态方法getDisplay方法创建:publicstaticDisplaygetDisplay(MIDletm);•Displaydisplay=Display.getDisplay(this);•Display显示可视组件的方法为:•publicvoidsetCurrent(DisplayablenextDisplayable);•其中参数nextDisplayable是欲显示的可视组件,所有可视组件类都是Displayable的子类。2、MIDlet程序的基本结构•importjavax.microedition.lcdui.*;•importjavax.microedition.midlet.*;•publicclassInfoTestextendsMIDletimplementsCommandListener{•publicInfoTest()•{display=Display.getDisplay(this);//取得表演舞台;}•protectedvoidstartApp(){//加入对象;}•publicvoidcommandAction(Commandc,Displayabled){}•protectedvoidpauseApp(){}•protectedvoiddestroyApp(booleanunconditional){}•}12.2.2用户界面类•可视组件分为两大类:•Screen高级用户界面•Canvas低级用户界面1、Screen高级用户界面•Screen被称为高级API,它和屏幕大小无关,不能直接操作屏幕。•特别适合做对于界面要求不高的手机应用软件。2、Canvas低级用户界面•Canvas被称为低级API,它和屏幕大小相关,可以直接操作屏幕。•低级用户界面主要包括两个类:•(1)Canvas——画布•(2)Graphics——画笔3、Command命令•MIDP有一个在高级用户界面和低级用户界面都可以使用的类——Command。Command是一个用户与应用程序互动的接口,使用该类可以在界面中实现命令菜单(软按钮)的功能。commnad的构造方法•构造方法为:•command(Stringlabel,int,intpriority);•其中:•字符串label为Command的功能说明,•commandType为Command的命令类型,•priority表示Command重要性,它的值越小表示重要性越高,反之则表示重要性越低。•Alert——信息提示框;•Form——窗体;•List——列表框;•TextBox——多行文本框。高级用户界面Screen高级用户界面Screen高级用户界面中的类:Alert类•Alert是一个信息提示对话框类,可以利用文字、图像及声音来提示用户。它的构造方法为:•publicAlert(Stringtitle)•Alert类的常用方法:•(1)setImage(Imageimg)为在信息框内显示图像;•(2)setString(Stringstr)为在信息框内显示文字。标题1、Alert组件设计一个程序,显示文本内容。(如左图)•importjavax.microedition.midlet.*;•importjavax.microedition.lcdui.*;•publicclassaextendsMIDlet•{•publicvoidstartApp()•{•DisplaymyDisplay=Display.getDisplay(this);•Stringstr=这是J2ME的文本信息;源程序•Alertalert=newAlert(提示信息);•alert.setTimeout(Alert.FOREVER);•alert.setString(str);//显示文本信息•myDisplay.setCurrent(alert);•}publicvoidpauseApp(){}•publicvoiddestroyApp(booleanunconditional){}•}一直显示显示图片•在startApp()方法中,改写为:•Stringicon=/mv.jpg;•try{•Imageimage=Image.createImage(icon);alert.setImage(image);//显示图像信息•}catch(java.io.IOExceptionx){}图标和文字同时显示try{Imageimg=Image.createImage(/zsm.jpg);Alertalert=newAlert(提示信息,str,img,AlertType.ALARM);}catch(java.io.IOExceptionx){}List组件•List是一个显示列表的可视组件类,List对象的列表项中可以带有一个图标和字符串。List的构造方法为:•List(Stringtitle,intListType);•List(Stringtitle,intListType,String[]str,Image[]img);List的的常用方法•(1)publicintappend(Stringstr,Imageimg);•在列表项后面添加项目内容,并返回这个项目的索引值。•(2)publicvoidset(intelementNum,StringstringPart,ImageimagePart);•用字符串stringPart及图标imagePart替换显示项。•建立List对象,并处理Command事件。•importjavax.microedition.midlet.*;•importjavax.microedition.lcdui.*;•publicclassListDemoextendsMIDletimplementsCommandListener•{•Displaydisplay;•Listlist;•CommandcmdExit,cmdStart,cmdHelp;源程序publicListDemo(){list=newList(标题,List.IMPLICIT);cmdStart=newCommand(开始,Command.OK,0);cmdExit=newCommand(退出,Command.EXIT,1);cmdHelp=newCommand(帮助,Command.HELP,1);}•publicvoidstartApp()•{•display=Display.getDisplay(this);•list.addCommand(cmdStart);•list.addCommand(cmdExit);•list.addCommand(cmdHelp);•list.append(,null);•list.setCommandListener(this);•display.setCurrent(list);•}•//在菜单里选择了command后,则调用commandAction()进行处理•publicvoidcommandAction(Commandcomm,Displayabled)•{•if(comm==cmdExit){destroyApp(true);}•elseif(comm==cmdStart){list.set(0,开始运行,null);}•elseif(comm==cmdHelp){list.set(0,使用说明,null);}•}•publicvoidpauseApp(){}•publicvoiddestroyApp(booleanunconditional){}•}12.3移动图形•1、操作界面•2、绘制图形•3、控制移动•publicclassMoveextendsMIDletimplementsCommandLi