1、J2ME构建于MIDP(移动信息设备简档)和CLDC(有限连接设备配置)或CDC(连接设备配置)。MIDP是设备生产厂商根据需要构造的一系列JavaAPIs。CLDC是Sun公司提供的所有设备必须支持的JavaAPIs。 一、J2ME的体系结构 Profile(MIDP Application) CLDC/CDC KVM Operating System 1.KVM 虚拟机本身需要40-80KB内存;只需要20-40K动态内存;能够运行在16位25MHz处理器上。不支持浮点数 2.CLDC包含三个基本包和一个联网包 3.MIDP中定义的一些APIs, javax.mi
2、croedition.midlet.*(MIDP的超类,用于创建应用程序) javax.microedition.lcdui.*(界面类,用于创建图形用户界面) javax.microedition.rms(数据记录类,相当于移动设备中的数据库) 两种比较流行的简档,一种是MIDP,另一种是KJava。MIDP是一种普遍的工业标准,不依赖于任何设备生产厂商。KJava的APIs主要是Sun公司特别指定的,主要运行在Palm OS上。 二、MIDP应用程序 MIDP是一个抽象类,需要实现三个方法。 CLDC(1.1): java.io---标准JavaIO包,J2SEIO包
3、的子集 java.lang——核心语言包,J2SE核心语言包的子集 java.util——工具包 javax.microedition.io——CLDC通用连接框架类和接口。 MIDP(2.0+) javax.microedition.midlet——MIDlet类包, 只包含一个MIDlet类可作为所有MIDlet的父类 javax.microedition.lcdui——界面类包,对GUI组件提供支持, javax.microedition.rms——记录管理系统,支持数据库系统的不同类和接口,它们随后存储和检索MIDlet所用的数据 javax.microedition.
4、lcdui.game——Game API,MIDP2.0游戏编程扩展 javax.microedition.media——多媒体类包javax.microedition.media.control——多媒体控制类包 javax.microedition.pki——数字签名类包另外还有javax.microedition.io包中的一部分类。 MIDlet(Mobile Information Devices let):手机上运行的J2ME应用程序,即移动信息设备小程序。以后我们编写的就是MIDlet 用Eclipse创建第一个MIDlet
5、MIDlet在应用中可能存在的状态: 运行(Active)状态—程序正在运行中; 暂停(Paused)状态 调用notifyPaused( )函数,MIDlet立刻进入此状态; MIDlet持有的所有资源暂时被释放,但它随时可能被运行; 销毁(Destroyed)状态 调用notifyDestroyed( )函数,MIDlet立刻进入此状态; MIDlet被永久地关闭并且释放占用的所有资源,等待着废物清理程序的处理。 运行,打包 三、MIDlet套件 在MIDlet套件中,应该包含如下文件: 用于运行程序的jar文件 用于描述jar文件的清单文件MANIFEST
6、MF Java应用程序描述文件jad 2.MANIFEST.MF 用来描述MIDletSuite的配置,如:名称、版本、开发商等;MANIFEST 文件为纯文本文件,文件扩展名为.mf. MANIFEST 必须包含以下属性: MIDlet-Name—MIDletSuite 的名称 MIDlet-Version—MIDletSuite 的版本号,格式为主版本.次版本.微版本,例如0.0.0,这也是版本号的默认值。版本号主要用于安装或升级。 MIDlet-Vendor —MIDletSuite 的提供商 3. jad文件 JAD 描述文件为纯文本文件,文件扩展名为.ja
7、d;说明具体的运行配置,以及Jar文件所在的位置的信息 JAD 描述文件必须提供如下属性: MIDlet-Name—略 MIDlet-Version—略 MIDlet-Vendor—略 MIDlet-Jar-URL—下载该MIDletSuite 的URL 地址。虽然这里可以使用绝对位置或相对位置,但还是建议用绝对位置。 MIDlet-Jar-Size—JAR 文件的大小,计算单位为字节。 Jad的作用:如果内容所有有用的描述都在jar中,大量的时间会被浪费在传输大文件上,而这些文件最终会被丢弃。清单文件中的部分属性及一些额外信息被复制到jad中,不需要下载全部的文件,首先获取
8、jad文件,再确定是否需要获取jar文件。 四、一个可用的MIDlet最基本结构 什么叫高级界面? 案例:制作如右图的界面 基础知识: MIDlet只是提供一个运行平台,上面的界面需要自己加上去 什么样的东西能够加到MIDlet上?答:Displayble 怎么加?答:用Display,因为它是用来管理系统的输入输出设备,核心代码:要使组件能在屏幕上显示,必须取得屏幕上的Display对象:Display display=Display.getDisplay(this); Display显示可视组件的方法为:public void setCurrent(Displa
9、yablenextDisplayable); 软键上方的菜单(命令按钮),是Command对象,不属于Displayable,只能依赖于Displayable Display的其他作用 获取设备支持的颜色: numColors() 是否支持彩色:isColor() 背景颜色,前景颜色:COLOR_BACKGROUND ,COLOR_FOREGROUND 边框颜色,高亮边框色:COLOR_BORDER , COLOR_HIGHLIGHTED_BORDER 高亮背景色,高亮前景色:COLOR_HIGHLIGHTED_BACKGROUND , COLOR_HIGHLIGHTED
10、FOREGROUND Displayable的其他作用 设置标题: setTitle 添加删除命令按钮: addCommand,removeCommand 【例题1】 import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class MIDlet1 extends MIDlet { public MIDlet1() { System.out.println("构造函数被调用"); } prote
11、cted void startApp() throws MIDletStateChangeException { System.out.println("startApp被调用"); } protected void pauseApp() { System.out.println("pauseApp被调用"); this.notifyDestroyed(); //调用destroyApp } protected void destroyApp(boolean arg0) throws MIDletStateChangeException { Syst
12、em.out.println("destroyApp被调用"); } } 【例题2】 import javax.microedition.lcdui.Command; import javax.microedition.lcdui.Display; import javax.microedition.lcdui.Form; import javax.microedition.midlet.MIDlet; import javax.microedition.midlet.MIDletStateChangeException; public class MIDlet2 exte
13、nds MIDlet { private Form frm = new Form("请您选择相应操作"); private Display dis; private Command cmdDel = new Command("删除该号码",Command.SCREEN,1); private Command cmdEdit = new Command("编辑该号码",Command.SCREEN,1); private Command cmdExit = new Command("退出该程序",Command.SCREEN,1); private Command cmd
14、Back = new Command("返回上一页",Command.BACK,1); protected void startApp() throws MIDletStateChangeException { dis = Display.getDisplay(this); //获得当前MIDlet上的显示对象 dis.setCurrent(frm); //将frm设置为当前界面 frm.addCommand(cmdDel); frm.addCommand(cmdEdit); frm.addCommand(cmdExit); frm.addCommand(cmdBack); frm.removeCommand(cmdEdit); } }






