Java 2 Micro Edition简介(三)

<script type="text/javascript"> google_ad_client = "pub-8800625213955058"; /* 336x280, 创建于 07-11-21 */ google_ad_slot = "0989131976"; google_ad_width = 336; google_ad_height = 280; // </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 本文作者:王森 台湾交通大学科技管理研究所 moli.mt88g@nctu.edu.tw █Java 版本的演进 相信熟悉Java历史的人或多或少都听说过,Java技术一开始并非就叫做Java,而是叫做OAK,而且最早的时候就是为了嵌入式系统而设计的产品。后来因为网际网络的发达,而OAK的诸多特性刚好又适合用在网络上(例如可移植性、编译后程序代码很小),因此被改名成Java,从此因缘际会地成了网络上的闪亮巨星。随着时间越来越成熟,也慢慢地产生了许多非原本预期中的相关运用。虽然Java已经被用到许多企业级软件上,可是其实骨子里面还是非常适合用在嵌入式系统之中。 Java版本的历史演进如下图所示: 从图中大家可以发现,虽然从Java 1.0发表之后,Java就被广泛地使用在桌上型应用程序以及Applet的开发上,但是,从Java 1.1开始,Java又回到了它一开始的老路--也就是嵌入式系统上面的应用,在当时Sun Microsystems发表了Embedded Java与Personal Java(也有人简称为PJava)这两项规格。 其中Embedded Java是为了资源十分有限,而且没有显示设备的装置而设计; Personal Java则是为在能够与网际网络联机、并拥有显示系统(例如彩色LCD)的消费性电子装置而设计。 接着Java的版本演进到Java 2,这时为了再明显区分各种Java的应用,所以分割出了J2EE、J2SE、以及J2ME三种版本。这三种版本的各种特性我们已经在前面详细的描述过,在此不再赘述。不过请大家记住,由于Java 2将Java的应用区分成三大块,使得Java程序语言的发展不会再像Java 1.1时如树枝状般扩散出去,这幺一来有助于大家对Java各种应用的厘清,而不会造成今后越发展下去越不可收拾的混乱局面。 额外向大家一提的是,后来Personal Java发展到1.2版的时候,也采用了一些Java 2平台上与安全性有关的设计。 █Java 2 Micro Edition概观 J2ME在设计其规格的时候,遵循着「对于各种不同的装置而造出一个单一的开发系统是没有意义的事」这个基本原则。于是J2ME先将所有的嵌入式装置大体上区分为两种:一种是运算功能有限、电力供应也有限的嵌入式装置(比方说PDA、手机);另外一种是运算能力相对较佳、并请在电力供应上相对比较充足的嵌入式装置(比方说冷气机、电冰箱、电视机上盒(set-top box))。因为这两种区分,所以Java引入了一个叫做Configuration的概念,然后把上述运算功能有限、电力有限的嵌入式装置定义在Connected Limited Device Configuration(CLDC)规格之中;而另外一种装置则规范为Connected Device Configuration(CDC)规格。也就是说,J2ME先把所有的嵌入式装置利用Configuration的概念区隔成两种抽象的型态。 其实在这里大家可以把Configuration当作是J2ME对于两种类型嵌入式装置的规格,而这些规格之中定义了这些装置至少要符合的运算能力、供电能力、内存大小等规范,同时也定了一组在这些装置上执行的Java程序所能使用的类别函式库、这些规范之中所定义的类别函式库为Java核心类别的子集合以及与该型态装置特性相符的扩充类别。比方就CLDC的规范来说,可以支持的核心类别为java.lang.*、java.io.*、java.util.*,而可以支持的扩充类别为java.microedition.io.*。 区分出两种主要的Configuration之后,J2ME接着在定义出Profile的概念。Profile是架构在Configuration之上的规格。之所以有Profile的概念,是为了要更明确地区分出各种嵌入式装置上Java程序该如何开发,具有哪些功能。因此Profile之中定义了与特定嵌入式装置非常相关的扩充类别,而Java程序在各种嵌入式装置的使用者接口该如何呈现的规定就是定义在Profile里头。Profile之中所定义的扩充类别也是根据底层Configuration内所定义的核心类别所建立。 嵌入式系统上的Java程序、Profile、Configuration、虚拟机器、操作系统、以及实体装置之间的关系如下图所示: 从上图大家一定可以发现,根据某个Profile规范所撰写的Java程序除了可以直接呼叫Profile中定义的扩充类别,也可以直接叫用Configuration里头所定义的核心类别子集与扩充类别。 目前J2ME对于Configuration以及Profile所组成的架构大致如下图所示: 从上图可以看出,目前从CLDC所衍生出来的Profile有两种,一种是Handheld Profile,大多数用在PDA上;而另外一种是Mobile Information Device Profile(MIDP),这个Profile是针对行动装置所定义,比方说呼叫器(Pager)行动电话等等,都是属于行动装置。 另外,我们可以发现Embedded Java与Personal Java似乎没有包含在两个Configuration任何一个底下,这看起来有点奇怪,不过他们还是归类在J2ME的范畴之中,而且也衍生出了Java的实时版本(Real-time Specification for Java)。其实Embedded Java与Personal Java会慢慢被架构在CDC之上的Profile所取代。拿Personal Java来说,其实它的规格与Personal Profile的规格是兼容的。之所以目前还存有Embedded Java与Personal Java这两个名词的主要原因在于市场上已经有大量采用这两种规格的实作品,所以短期内Personal Java仍然会不断演进,一时之间还无法立刻归类到J2ME的特定Profile之下。 █CLDC、CDC以及他们所衍生出来的Profile之规格 既然Sun将所有的嵌入式装置区分成CLDC 与CDC两种,接下来我们先就这两种Configuration做讨论。 Connected Limited Device Configuration(CLDC)就Sun的文件所描述,是定义为「可以放在您的手掌上的装置」,比方说Palm系列的PDA或是手机就是最好的例子。而Connected Device Configuration(CDC)根据Sun文件的描述,定义为「可以插在墙壁上的装置」,比方说电视机上盒(set-top box)就是一个例子。不管如何,这两种Configuration之中定义的皆为这两种型态的嵌入式装置要执行Java程序所需要的最小配备需求。底下是CLDC与CDC各自的最小配备需求: 配备/Configuration CLDC CDC RAM RAM与ROM再加上闪存(Flash Memory)要为128K~512K。 大于等于256K ROM RAM与ROM加上闪存要为128K~512K。 大于等于512K 电源 通常是使用电池,所以电源有限。 不设限 在Javasoft的官方文件之中所架构出来的J2ME如下图所示: 根据上图,我们来讨论一下建构在Configuration之上的Profile。在Profile之中也定义了特定种类嵌入式装置的最小配备需求。既然Profile建构在Configuration之上,其意义就是说Profile之中所规范的配备需求不可能比Configuration还要低。同时,Profile之中对于显示功能、网络功能、以及耗电能力等相关需求将会比Configuration之中所规定的还要高。 底下是一些Profile的配备需求: 配备/Profile Foundation Profile Personal Profile MIDP RAM 至少512K 至少1 MB RAM与ROM至少要为512K ROM 至少1024K 至少2.5 MB RAM与ROM至少要为512K 电源 不设限 不设限 通常是使用电池,所以电源有限 网络连接能力 部分功能 部分功能 具有低频宽的无线通讯能力 其它 要有额外的RAM或ROM供应用程序执行 要有额外的RAM或ROM供应用程序执行 要有额外的RAM或ROM供应用程序执行并储存资料 虽然官方文件之中绘出J2ME的美好远景,其实这些规格还有待大家努力。在本者撰写本文的时候,我们所能找到有关Configuration的规格只有完整的CLDC规格(v1.0)。而有关Profile的规格只有Mobile Information Device Profile的规格已经底定(v1.0),而其它如Personal Profile、 Foundation Profile、RMI Profile,因为是根据CDC所订定,而CDC的规格尚未底定(v0.2),所以这三个Profile的规格目前只有v0.x版。其余的Profile就连规格都还在草拟之中了。如果您对这些正在草拟的规格有有兴趣的话,请到Java Community Process (JCP)的网页http://java.sun.com/aboutJava/communityprocess/上观察Java Specification Request (JSR)的后续进展。底下表格是J2ME相关的JSP之所在位置: JSR #000068 J2METM Platform Specification http://java.sun.com/aboutJava/communityprocess/jsr/jsr_068_j2me.html JSR #000030 J2ME Connected, Limited Device Configuration http://java.sun.com/aboutJava/communityprocess/final/jsr030/index.html JSR #000036 J2METM Connected Device Configuration http://java.sun.com/aboutJava/communityprocess/jsr/jsr_036_j2mecd.html JSR #000037 Mobile Information Device Profile for the J2METM Platform http://java.sun.com/aboutJava/communityprocess/jsr/jsr_037_mid.html JSR #000075 PDA Profile for J2METM http://java.sun.com/aboutJava/communityprocess/jsr/jsr_075_pda.html JSR #000062 Personal Profile Specification http://java.sun.com/aboutJava/communityprocess/jsr/jsr_062_pprof.html JSR #000046 J2METM Foundation Profile http://java.sun.com/aboutJava/communityprocess/jsr/jsr_046_j2mefnd.html JSR #000066 J2METM RMI Profile http://java.sun.com/aboutJava/communityprocess/jsr/jsr_066_rmime.html 虽然已经底定的Profile规格并不多,可是以目前来说,已经足以让我们能够撰写PDA(PlamOS)和手机(Motorola)上的应用程序了。各位读者可以在CLDC参考实做的内附文件之中,除了可以找到CLDC规格所订定的核心类别子集与扩充类别之说明文件,也可以发现与PalmOS相关扩充类别(com.sun.kjava.*)的说明文件。同理,我们除了可以在Motorola J2ME SDK之中找到CLDC支持的核心类别子集与扩充类别之说明文件,同时也可以找到和Mobile Information Device Profile(MIDP)相关的扩充类别(javax.microedition.midlet.*、javax.microedition.lcdui.*、javax.microedition.rms.*)之说明文件。 Personal Java的发展其实以一段时间了,无数的公司根据其规格生产实作品,所以接下来将针对Personal Java做个别探讨。 之一 之二 之三 之四
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
贪吃蛇.jar import java.io.IOException; import java.util.Hashtable; import java.util.Vector; import javax.microedition.lcdui.Font; import javax.microedition.lcdui.Graphics; public class DCSnake extends i { private h jdField_a_of_type_H; private h jdField_b_of_type_H; private h jdField_c_of_type_H; private boolean jdField_c_of_type_Boolean; private boolean d; private int jdField_a_of_type_Int; private int jdField_b_of_type_Int; private int jdField_c_of_type_Int; private boolean e; private f jdField_a_of_type_F; private f jdField_b_of_type_F; private f jdField_c_of_type_F; public final void a(int paramInt) { if (!this.jdField_c_of_type_Boolean) { paramInt = this; if (!this.d) { paramInt.jdField_a_of_type_Int = 6; paramInt.jdField_b_of_type_Int = 0; paramInt.d = true; return; } if (paramInt.jdField_b_of_type_Int < paramInt.jdField_a_of_type_Int) { Object localObject1; switch (paramInt.jdField_b_of_type_Int) { case 0: a.a(); break; case 1: this = paramInt; try { localObject1 = null; localObject1 = Font.getFont(32, 0, 8); Font localFont1 = Font.getFont(32, 1, 8); Font localFont2 = Font.getFont(32, 1, 0); this.jdField_a_of_type_F = new f((Font)localObject1, 0, -1); this.jdField_b_of_type_F = new f(localFont1, 16777215, 0); this.jdField_c_of_type_F = new f(localFont2, 16776960, 32768); t.a(this.jdField_c_of_type_F, this.jdField_a_of_type_F, this.jdField_b_of_type_F); } catch (IOException localIOException) { } case 2: localObject1 = a.a(new int[] { 1245188, 1245190, 1245189 }); v[] arrayOfv = a.a(new int[] { 1245191, 1245193, 1245192 }); t.a(new c(localObject1, true), new c(arrayOfv, true)); break;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值