blackberry平台J2ME编程指南(六)

来源:互联网 发布:手机互传软件 编辑:程序博客网 时间:2024/06/10 03:34

5 J2ME简表   

      

5.1 J2ME 简表是什么?

      如我们在前面教程中提及的,一个简表定义了受支持设备的类型。例如,移动信息设备简表 (MIDP),定义了蜂窝电话的类。它把一些特定于域的类加入J2ME 配置中来定义对类似设备的使用。已经为 J2ME 定义了两个简表:KJava MIDP 。它们都构建在 CLDC 之上。KJava MIDP 都和 CLDC 及小型设备相关联。
      简表被构建在配置的顶部。由于简表是特定于运行应用程序的设备的大小(内存的数量),所以,某个简表是与某种特定的配置相关联的。
      在纲要简表上,您可以创建自己的简表,这种纲要简表也称为基础表,它对于 CDC 也是可用的。然而,在本教程和本节中,我们将只重点学习建立在 CLDC 上的 MIDP 简表。  

5.2 简表 : MIDP

      MIDP 适合诸如蜂窝电话和寻呼机等移动设备。MIDP KJava 一样,也是建立在 CLDC 之上的,并且提供一个标准的运行时环境,允许在终端用户设备上动态地部署新的应用程序和服务。
      MIDP 是一个公共的、为移动设备设计的工业标准简表,它不依赖某个特定的商家。对于移动应用程序开发来说,它是一个完整的、受支持的基础。
      MIDP 包含下列软件包,前面 3 个是核心 CLDC 软件包,另加 3 个特定于 MIDP 的软件包。我们将在后面的教程中讨论每个软件包:
      · java.lang
      · java.io
      · java.util
      · javax.microedition.io
      · javax.microedition.lcdui
      · javax.microedition.midlet
      · javax.microedition.rms  

6. J2ME开发环境

 J2ME开发的工具很多,这里我们以Sun公司发布的WTK为例说明

下载和安装 J2ME 无线工具包 (J2ME Wireless Toolkit)

      J2ME 无线工具包提供一个完整的开发环境来编写和测试 MIDP 应用程序。下载包括工具、文档和仿真环境,例如,一个与 Forte for Java 集成的模块。
      目前,J2ME 无线工具包仅支持 Windows 98 第二版、Windows NT 4.0 Windows 2000 是可用的,不支持 Windows 95J2ME 无线工具包的 Solaris Linux 版本在本教程编写的同时正处于筹划之中。
      Windows 环境下安装 J2ME 无线工具包请按如下步骤:
      1. 下载 J2ME 无线工具包。
      2. 运行 j2me_wireless_toolkit-1_0_1-fcs.exe 安装无线工具包。
      当系统提示您提供安装目录时,请确保该安装目录的完全合法的路径中不包含任何空格。这将帮助您在今后使用工具包时避免可能出现的问题。

第二篇 J2MEJ2SE的差异

在第二篇J2ME基本介绍中,通过对CLDC/MIDP以及J2ME编程的比较,我们实际上已经看到了J2ME和标准Java编程的一些差异,本章我们会从两个方面来着重阐述J2MEJ2SE编程的重大差异。

如下是一个标准的J2SE的命令行程序的示例,一般来说标准的J2SE编程中,需要一个以main函数作为入口的启动点。

如下部分是一个标准的J2ME的程序的主题部分,不同于J2SEJ2ME的程序的启动以及执行是一个个的单元构成。在下面关于J2ME应用简表的介绍中,我们会重点介绍MIDLET的写法和生命周期。

 

从这两张图来看,标准的J2ME的程序开发,和J2SE的差异还是很大的。下面,我们就从两个开发领域的总体和具体分门别类的API类别来说明,在这两个领域编程的时候的差异。

1 总体API差异

 

1.1  CLDC API 
     
1.1.1 介绍


     

    迄今为止,我们知道 CLDC 比较适合 J2ME,并且也已经建立了我们的开发环境。在这一章中,我们将更深入地探索 CLDC APICLDC API 实际上只是 J2SE 的一个子集,它包括 java.langjava.io java.util,另加一个新软件包 -- javax.microedition。我们将逐个来研究这些软件包,并突出显示每一个包中的重要的类。
      尽管每一个类都在 J2SE 中,但是没有必要让每一个类的 CLDC 实现都能实现 J2SE 支持的所有方法。您可以检查 CLDC API 文档以确认哪些方法是受支持的。  



1.1.2 java.lang


      CLDC java.lang 软件包是 J2SE java.lang 软件包的一个子集。与 J2SE 相比,它最引人注目的可能便是冗长的浮点操作了,特别是浮点 (Float) 和双精度 (Double) 类。如果使用浮点的话,这些冗余将涉及到所有其它的类。
      相对于 J2SE v1.3 APICLDC API 中删去了几个其它的类。其中包括 ClassLoaderCompilerInheritableThreadLocalNumberPackageProcess RuntimePermissionSecurityManagerStrictMathThreadGroupThreadLocal Void
      我们描述了可从下面几页表中的 CLDC java.lang 软件包中获取的主要的类。Java 开发人员对所有这些类的使用都应该是非常熟悉了。
      除这些核心类之外,您还将看到 CLDC 支持的 Runnable 接口,正象 Exception Error 和其它有关的类一样。

 
1.1.3 java.lang 核心运行时类
     

   java.lang 软件包的核心运行时类有:
      · Class -- 显示正在运行的 Java 应用程序中的类和接口。
      · Object -- 与在 J2SE 中相同,Object 是所有 Java 对象的基本类。
      · Runtime -- Java 应用程序提供一种与运行时环境(Java 应用程序在其中运行)进行交互的方法。
      · System -- 提供一些静态的帮助方法,就像为 J2SE 提供方法一样。
      · Thread -- 定义 Java 程序的一个执行线程。
      · Throwable -- Java 语言中所有错误和异常的超级类。  

 


1.1.4 java.lang 核心数据类型类

 


      java.lang 软件包中的核心数据类型类有:
      · Boolean -- 包装 boolean 原始数据类型。
      · Byte - 包装 byte 原始数据类型。
      · Character -- 包装 char 原始数据类型。
      · Integer -- 包装 int 原始数据类型。
      · Long -- 包装 long 原始数据类型。
      · Short -- 包装 short 原始数据类型

 

 

1.1.5 java.lang 帮助类

 


      java.lang 软件包的帮助类有:
      · Math -- 包含执行基本数学运算的方法。请注意,所有执行浮点值运算的方法都被省略了,仅保留了关于 integers longs 的方法:abs()min() max()
      · String -- Java 中代表对象 String,就像在 J2SE 中一样。
      · StringBuffer -- 代表一个可以修改的串,就像在 J2SE 中一样。

 

 

1.1.6 java.io 输入类
     

 CLDC API 包含许多 J2SE 中共同使用的输入类。特别地,CLDC java.io 软件包中包括下面一些类:
      · ByteArrayInputStream -- 包含一个内部缓冲器,它代表可能从输入流中读取的字节。
      · DataInput -- 一个接口,从二进制输入流提供字节以供读取并把它们转换成原始 Java 数据类型。DataInputStream 提供该接口的实现。
      · DataInputStream -- 允许应用程序以独立于平台的方式从基层输入流中读取原始 Java 数据类型。
      · InputStream -- 一个抽象类,它是所有代表字节输入流的类的超级类。
      · InputStreamReader -- 读取字节并把它们按照指定的字符编码方法转换成字符。
      · Reader -- 一种读取字符流的抽象类。
      注意:其中一些类可能不包含 J2SE 姊妹版支持的所有方法,就像在 java.lang 软件包中一样。尤其是省略了浮点和双精度方法。

 

 

 

1.1.7 java.io 输出类

 


      CLDC API 包含了许多 J2SE 中的共同使用的输出类。特别是,CLDC java.io 软件包中包括下面一些输出类:
      · ByteArrayOutputStream -- 实现一个输出流,在此输出流中数据被写入字节数组。
      · DataOutput -- 一种接口,提供原始 Java 数据类型以供写入二进制输出流。DataOutputStream 提供该接口的实现。
      · DataOutputStream -- 一个输出流,允许应用程序以一种便捷的方式编写原始 Java 数据类型。
      · OutputStream -- 一个抽象类,它是所有代表字节输出流的类的超级类。
      · OutputStreamReader -- 给出字符,并按指定的字符编码方法将其转换为字节。
      · PrintStream -- 添加一种便捷的方法来打印数据值的文本表现形式。
      · Writer -- 编写字符流的一个抽象类。
      其中一些类可能不包含 J2SE 支持的所有方法,比如浮点和双精度方法。 

 



1.1.8 java.util 收集类
     

 CLDC java.util 软件包中包含 J2SE java.util 软件包中最常用的类。这些类中包括四个收集类(实际是三个收集类和一个接口),以及日期/时间和实用程序类。
      CLDC 支持的 java.util 收集类有:
      · Enumeration -- 一个接口,通过项目集允许对例程进行重复调用。
      · Hashtable -- 实现 hashtable,将键映射到值。
      · Stack -- 代表了一个后进先出 (LIFO) 的对象集合或堆栈。
      · Vector -- 代表可以调整大小的对象数组或者矢量

 

 

1.1.9 java.util -- 其它的类
     

CLDC 支持的 java.util 类中其余部分包括日期和时间类,以及 Random 实用程序类。下表中简要列出了这些类。
      · Calendar -- 一个抽象类,使用一套整型字段如 YEARMONTH DAY 等来获取和设置日期。
      · Date -- 代表特定的时间和日期,精确到毫秒级。
      · Random -- 一个实用程序类,用来生成 int long 的随机值流。
      · TimeZone -- 代表时区的偏移量,也用于校正时间。

 

 
1.1.10 javax.microedition.io
     

迄今为止,我们在 CLDC API 中看到的所有的类都是 J2SE API 的子类。CLDC 还包含一个附加的软件包 -- javax.microedition.io
      在这个包里唯一被定义的类就是 Connector 类,也称为工厂类,包含创建 Connection 对象或输入、输出流的方法。
      当动态识别一个类的名字时,Connection 对象就被创建了。类名称的识别基于平台名称和被请求连接的协议。描述目标对象的参数串应该满足 RFC 2396 规范所要求的格式。请使用下列格式:
      {scheme}:[{target}][{params}]
      {scheme} 是一个协议的名称,如 http ftp{target} 通常是一个网络地址,但是面向非网络的协议则可能把它当作一个相当灵活的字段来处理。还有一些参数,如 {params} 被指定为一系列形如 ";x=y" 的分配形式(例如,;myParam=value)。

 

  

1.1.11 javax.microedition.io 帮助接口

      除类属连接工厂类之外,javax.microedition.io 软件包中还包含下列面向连接的接口:
      · Connection -- 定义了最基本的连接类型。这个接口也是此软件包中所有其它连接接口的基本类。
      · ContentConnection -- 定义了一个可以通过内容的流连接。
      · Datagram -- 定义了一个类属数据报接口。
      · DatagramConnection -- 定义了类属数据报连接和它必须支持的性能。
      · InputConnection -- 定义了一个类属输入流连接和它必须支持的性能。
      · OutputConnection -- 定义了一个类属输出流连接和它必须支持的性能。
      · StreamConnection -- 定义了一个类属流连接和它必须支持的性能。
      · StreamConnectionNotifier -- 定义了一个流连接的通告程序必须具有的性能。

 

2. MIDP API  

2.1 介绍

      移动信息设备简表 (MIDP) 适合类似于蜂窝电话和寻呼机这样的设备。MIDP,就象 KJava 一样,同样也建立在 CLDC 之上。MID 简表提供一种标准的运行时环境,允许在终端用户设备上动态地配置新的应用程序和服务。
      在本章中,我们将详细地讨论 MID 定义的七个软件包。我们还将建立一个 MIDP 应用程序示例。

2.2 UI 设计注意事项

      MIDP 包括一个低级的 UI API 和一个高级的 UI API。低级的 API 允许您完全访问一个设备的显示屏,也允许访问原始键和指针事件。然而,使用低级 API 时,没有可用的用户界面控件。应用程序必须精确地绘制出按钮和其它所有的控件。
      相反,高级 API 提供简单的用户界面控件但不能直接访问原始的输入事件或显示屏。由于显示屏的尺寸和 MIDP 设备输入方法的差异,控件显得很抽象。MIDP 的实现确定了绘制控件的方法,也确定了如何管理用户输入。
      让我们在后面的章节里更进一步了解 MIDP 的软件包和类。 

2.2 MIDP API

      MIDP 包含四个核心 CLDC 软件包 (java.langjava.iojava.util javax.microedition.io),另加下面的三个特定于 MIDP 的软件包:
      · javax.microedition.lcdui
      · javax.microedition.midlet
      · javax.microedition.rms
      我们将在本章的后面部分详细介绍特定于 MIDP 软件包。除了上面新的软件包之外,MIDP 还向核心 CLDC 软件包添加了四个新类,如下所示。
      · java.util.Timer -- 用于为后台线程中将来要执行的任务确定时间。
      · java.util.TimerTask -- java.util.Timer 类使用,用来为后台线程中稍后的执行定义任务。
      · javax.microedition.io.HttpConnection -- 一个接口,为 HTTP 连接定义必要的方法和常量。
      · java.lang.IllegalStateException -- 一个 RuntimeException, 指出在不合法或不合适的时间已经调用的一个方法。  

2.3 MIDlet 介绍

      MIDlet 是一个 Java 类,它扩展了 javax.microedition.midlet.MIDlet 抽象类。实现 startApp()pauseApp() destroyApp()方法,这些方法类似于 J2SE java.applet.Applet 类中的 start()stop() destroy()方法。
      除了扩充 javax.microedition.midlet.MIDlet 的主 MIDlet 类之外,一个 MIDP 应用程序通常还包括其它一些类,这些类能随它们的资源一起被打包成为 jar 文件 -- 称之为 MIDlet 套件。一个 MIDlet 套件中的不同 MIDlet 能共享 jar 文件的资源,尽管不同套件中的 MIDlets 不能直接相互作用。

      在本章开头,我们已经看到MIDLET程序的基本样子了,这里我相信说明一下一个MIDLET应用的周期。

MIDlet 在应用程序生命周期中有三种可能的存在状态 -- 运行状态、暂停状态、销毁状态。运行状态,正如其名称所暗示的,意味着 MIDlet 正在运行中。这种状态始于 startApp 方法被调用时。在暂停状态中,MIDlet 持有的所有资源将被释放,但是它准备着再次被运行。调用 notifyPaused 方法时,MIDlet 处于暂停状态。在销毁状态中,MIDlet 已经永久地将其自身关闭,释放所有的资源,等待着废物清理程序的处理。它是通过 notifyDestroyed 方法来调用的。
      在接下来的两页中,我们来看一个简单的 HelloWorld MIDlet  

原创粉丝点击