J2ME应用程序开发指南.docx
- 文档编号:9987632
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:84
- 大小:240.58KB
J2ME应用程序开发指南.docx
《J2ME应用程序开发指南.docx》由会员分享,可在线阅读,更多相关《J2ME应用程序开发指南.docx(84页珍藏版)》请在冰豆网上搜索。
J2ME应用程序开发指南
简介
简介使用Java编写PalmOS程序的解决方案
(1)
现在,使用Java语言为PalmOS编写程序的领域还没有完全统一,并且也有许多程度上的差异,目前,市面上有好几种不同的可用的应用程序接口,每种应用程序接口都给出了一个到当前的PalmOS应用程序不同程度的访问权限。
也许这其中大家最熟悉的是Sun微系统出品的产品;但是能够为PalmOS写程序的绝不只有这一种产品。
本文这一部分并不是介绍使用Java编写Palm程序的教程--因为每种我们将要讨论的解决方案都有自己的要求和值得注意的地方--而是一篇向开发者概括介绍开发工具的的文章,我们将纵观这一领域,找出在使用Java语言开发PalmOS应用程序时,你应该使用什么工具以及你又能够得到什么。
一、Sun的解决方案:
KVM、Configuration和Profile
KVM是KilobyteVirtualMachine(千字节虚拟机),那么命名是因为它的内存大小是以千字节来量度,而不是像Java虚拟机那样需要兆字节。
因为有这么苛刻的内存要求,KVM的功能只是完整JVM的的子集。
你可以从Javasoft站点上找到全部的信息,但是值得注意的是它遗漏了映射(reflection)、JNI和自定义类装载器以及一个可变的安全机制。
Sun已经制订一个计划,提供了configuration和profile来满足设备程序设计的需要。
configuration是一个应用程序接口,是设计来提供一个基础,用于一类广泛的一般的设备,所有的这些设备都有相似的特性,比如说有限的内存,偶然性强的网络连接性,低电力消耗,可运行在电池上,所以,J2Me被设计得既一般又抽象。
现在Java2MicroEdition(J2ME)可用的configuration有CLDC(Connected,LimitedDeviceConfiguration)和CDC(ConnectedDeviceConfiguration)两种,后者用于比Palm功能更强大的设备,这就超出了我们讨论的范围;而前者,代表有限连接设备配置,是像PDA,双通道呼叫器以及移动电话。
CLDC包括一个J2SE中的类的子集,但是有一些重要的差别,例如,因为小型设备中的虚拟机使用的无用单元收集机制,CLDC的java.lang.Object不包含finalize方法,你应当记住,这个应用程序接口中的某个特定的类可能出现但是它的某个方法却没有出现。
请参考应用程序接口文档,这样的话你就会知道什么时候该用什么configuration了。
对于许多刚开始使用CLDC开发程序的朋友,感到奇怪的是CLDC不支持浮点数。
这是KVM默认的实现,KVM是使用C编写的,它可以被移植到许多平台上,它不支持浮点运算,这是因为我们所面对的硬件一般是小型设备,有的还是使用8位的处理器,这些处理器有可能不支持浮点运算。
profile是特殊的具体的,它的目标是一个比configuration更具体的设备的类,包括用户界面和事件处理元素,这在configuration中是没有出现。
现在,PalmOS或PDA没有公开可用的profile。
JavaCommunityProcess有一个已经开发了一段时间的PDAProfile,开发者们仍然在等待一个新的PDAprofile版本。
与此同时,想要遵循KVM/Sun解决方案开发者的应当做什么呢?
CLDC版本包括一个可以用作PalmOS的最原始的profile的类的最小的集合,据悉,Sun不赞同使用这些类开发任何商业程序,他们也不计划对这个应用程序接口做任何更新。
但是如果没有PDAprofile,开发者也可以使用这些类库。
通常我们所知的是Kjava,它包含了许多GUI类:
CheckBox、RadioButton、List等等。
除了这些,还有Spotlet类,它被用于处理事件以及PalmOS捕获手写笔的输入和键盘按下的事件等等。
下面是一个使用kjava来显示简单的文本字符串和按钮的类:
importcom.sun.kjava.*;
publicclassHelloKjavaextendsSpotlet
{
privatestaticButtonOKButton;
publicstaticGraphicsg=Graphics.getGraphics();
file:
//取得Graphics对象
publicstaticvoidmain(Stringargs[])
{
HelloKjavahk=newHelloKjava();
}
publicHelloKjava()file:
//HelloKjava类的构造方法
{OKButton=newButton("OK",84,140);
register(NO_EVENT_OPTIONS);
drawScreen();
}
publicvoidpenDown(intx,inty){
if(OKButton.pressed(x,y)){
System.exit
(1);
}
}
publicvoiddrawScreen()
{
g.clearScreen();file:
//清除屏幕
g.drawString("HelloKJava",20,10);file:
//把字符串画在屏幕上
OKButton.paint();
}
}
还有一个类com.sun.kjava.Database,它在一种到达Palm数据库应用程序接口的方法。
这就是说,它是非常原始的并且不提供访问存在Palm数据库中的任何内容完全的权限。
它只允许设置和获得字节数组;它不允许键入访问,除了通过记录标识号(是一个整数)。
因为数据库只能理解字节数组,给你的数据意味着你需要把这些字节数组解析成有含义的字段。
简介
简介使用Java编写PalmOS程序的解决方案
(2)
二、Kawt的解决方案
Kawt也是KVM的一个AbstractWindowToolkit(抽象窗口工具包),Kaw为Java程序员提供了一个更加常见的应用程序接口集合,例如,它使用通用布局管理器(除了GridBag)来在屏幕上放置组件,此外它还允许你设置那些组件的监听者,换言之,Kawt中没有包括Spotlet机制。
按钮、面板、标签以及文本框和其他的AWT类都可用,而且,还可以有自定义类:
FtpShel,TabbedPane和GifLoader,还有一个类java.io.File,它是一个使用标准的Palm数据库文件储存资料的目录或文件结构的抽象类。
使用Kawt,我们编写出来的程序如下所示:
importjava.awt.*;
importjava.awt.event.*;
publicclassHelloKawtextendsFrameimplementsActionListener
{
ButtonOKBtn=newButton("OK");
Labellbl=newLabel("HelloPalm");
publicstaticvoidmain(Stringargs[])
{
newHelloKawt();
}
publicHelloKawt()
{
OKBtn.addActionListener(this);
this.add("South",OKBtn);
this.add("Center",lbl);
pack();
this.show();
}
publicvoidactionPerformed(ActionEventae)
{
System.exit
(1);
}
}
虽然Kawt提供了一个比kjava更好的类的集合,但是它实际上是基于kjava的,因此,它缺少数据库类。
对于开发Palm程序来说,这是一个相当严重的问题。
通常来说,任何商用应用程序都需要把数据储存在设备上,随后还要与台式机同步化,kjava.Database的同步化有点问题,因为它不包含HotSync软件期待的分类,它也不允许访问每个包含最初记录的"本地"palm数据库文件的属性位,即使使用了PDAProfile版本,这些也不可能解决,因为profile的目标是一般的PDA而不是特别的PalmOS。
然而,Kawt团队毕竟也做了一件出色的工作,它使刚开始写Palm程序的程序员很容易使用Java编程。
三、IBM解决方案
IBM有自己的虚拟机,叫J9---它在许多方面都优于KVM,VisualAgeMicroEdition支持J9,我们大家都知道,VisualAgeMicroEdition是一个来自ObjectTechnologyInternational的IDE,而ObjectTechnologyInternational又是IBM拥有的子公司。
而VAME是一个完整的开发工具,它可以给对PalmOS应用程序接口完全的访问权限,然而,这需要付出一些代价。
虽然VAME是一种Java工具,它所提供的东西都是使用Palm应用程序接口的本地C方法的包装。
也就是说,VAME中调用的方法和你在C中看到的方法完全相同。
虽然理解你的应用程序所要运行的操作系统并不是一件坏事,但这需要你非常了解开发Palm的C应用程序接口的方法特征,如果你只是一名Java开发者这就成了问题了。
这个是一个缺点,开发VAME的工程师似乎发觉到了这一点,并尝试着去改进。
下面是一个使用VAME编写的例程:
importcom.ibm.oti.palmos.*;
importcom.ibm.oti.palmos.util.OSX;
publicclassHelloJ9implementsOSConsts{
publicstaticvoidmain(String[]args){
CharPtrtitle=newCharPtr("IBMVameDemo");
EventTypeevent=newEventType();
try{
FormTypeform=OS.FrmNewForm(0,title,0,0,160,160,
0,0,0,0);
OS.FrmSetActiveForm(form);
OS.FrmDrawForm(form);
OSX.WinDrawChars("HelloJ9!
",5,30);
while(true){
OS.EvtGetEvent(event,-1);
if(OS.SysHandleEvent(event)==0){
if(event.getEType()==appStopEvent){
OS.FrmEraseForm(form);
OS.FrmDeleteForm(form);
return;
}
}
}
}finally{
title.dispose();
event.dispose();
OS.FrmCloseAllForms();
}
}
}
正如你所看到的,这个程序与前几个例子都不太一样。
如果你能够越过这个障碍,你的应用程序的性能将远远优于一个基于KVM的应用程序。
VAME其他与众不同的优点就是它可以访问所有的本地应用程序接口调用,使用一个管道,你可以同步创建任何Palm数据库。
四、Waba/SuperWaba解决方案
Waba是另外一种虚拟机。
在风格上,Waba有点像Kjava和Kawt的中间品。
它包含了比kjava更多的GUI组件,使用了坐标位置来在屏幕上放置组件,而不是像kawt是使用布局管理器。
Waba的优点是它的速度,它的确比KVM快了很多;而且,如果你认为你的应用程序可能不仅仅是只定位于PalmOS,你也可以使用Waba,因为Waba也可以在WindowsCE上运行。
Waba还有一种扩展,叫Superwaba,它提供了更多的功能。
这里有一个使用Waba编写的小型应用程序,它使用一个附加的类来设置标题:
importwaba.ui.*;
importwaba.fx.*;
publicclassHelloWabaextendsMainWindow
{
ButtoncloseButton;
publicHelloWaba()
{
Titletitle=newTitle("HelloWaba");
title.setRect(0,0,this.width,15);
add(title);
closeButton=newButton("Close");
closeButton.setRect(0,this.height-15,44,15);
add(closeButton);
}
publicvoidonEvent(Eventevent)
{
if(event.type==ControlEvent.PRESSED)
{
if(event.target==closeButton)
exit(0);
}
}
}
Waba还有许多优点:
使用剪贴板拷贝和粘贴的能力,访问系统键盘以便更容易输入文本,而且还有一个类,封装了一些虚拟机细节,允许你确定虚拟机正在运行的平台以及ROM的版本。
五、总结
使用Java编写PalmOS应用程序的解决方案取决于好几个因素:
你的目标是否只是PalmOS;对于开发来说,速度和容易度那个更重要;我们现在离最后决定使用什么解决方案开发Palm程序还很远,因为这一领域将来还会发生巨大的变化。
以后的文章中,我要详细介绍使用J2ME与Waba来编写可运用于PalmOS或其它小型设备的应用程序。
J2ME之谜
第一节引言J2ME概述
第一节引言J2ME概述
到目前为止,大部分人都已非常熟悉Java2平台,以及Sun如何把Java技术分成三个版本(标准版、袖珍版以及企业版),Sun在1999年6月时推出了Java2袖珍版(J2ME)来满足消费电子和嵌入设备的需要。
J2ME是为了那些使用有限的能源、有限的网络连接(常常是无线连接)以及有限图形用户界面能力的设备开发的。
它最初的目标是16位或32位处理器,16MHz时钟频率,512K或更少内存的设备。
乍一看之下,J2ME就像一个没有绑定明显主题的松散的应用程序接口和技术规范。
我们想通过说它不是什么东西的方法来描述它,它不是一组用于台式机Java应用程序规范,如果你再观察仔细一些,你会发现所有的J2ME组件都围绕一个中心,这些中心被称为configuration(配置,Sun的市场营销资料也称它们designcenters,设计中心),它们中间的每一个都是用于消费电子和嵌入设备的特别的类。
Connectedlimiteddeviceconfiguration(有限连接设备配置,简称CLDC)这个配置定义了Java应用程序接口以及支持手持设备的技术,就像Sun的文档中所描述的那样,"devicesthatyouholdinyourhand(你握在手中的设备)"Palm序列手持设备可能是这一领域的设备的最好的例子,特别是它有开发CLDC的功能以及Palm设备运行期系统可用。
Connecteddeviceconfiguration(连接设备配置CDC)这个配置定义支持象Sun文档中所说,"devicesthatyouplugintoplugintothewall(你插入墙的设备)的设备的应用程序接口和技术,这样的设备的一个例子可能就是机顶盒。
这两种配置不同的地方就在于它们应用于的装置的能力,CLDC设备的处理器能力有限(与台式机系统比较),并且存储器大小一般也只在128KB到512KB之间,与此同时,CDC系统就不同了,它可能有32位或64位处理器,以及有限的存储容量,不过它的下限也得超过512K。
它遵循的原则就是,每个不同的能力硬件的配置都将被不同的虚拟机支持。
基于CDC的系统使用一个功能强劲的虚拟机,而基于CLDC系统的使用KVM(我过会儿会介绍)。
每个配置代表一种低水平的,基本的应用程序接口,在这两个相似基础之上是profile(简表),用于特殊设备的额外的应用程序接口。
我想通过看一张来自SUN提供的文档中的图表(参见图1)来解释这其中的关系。
图一解释配置和简表的体系结构J2ME的体系结构被横向地分成三层,纵向分成两部分。
配置包括一个控制配置核心类的虚拟机,具体的简表位于每个配置之上。
J2ME现在定义两个配置,ConnectedDeviceconfiguration(连接设备配置CDC)和限制性更强的ConnectedLimitedDeviceConfiguration(有限连接设备配置)。
简表的实现是Java应用程序接口的一个集合,用于适应被定义配置的应用程序接口提供的服务,简表是一个完整的运行环境,一个在简表上执行的应用程序不需要额外的支持类。
J2ME没有定义满足这两种配置的标准化用户接口,Sun也承认现在的消费设备多种多样,用户界面也各不一样,所以定义一个可用于所有用户的界面是一场失败的战争。
J2ME中的用户界面定义在简表中。
J2ME之谜
第二节J2ME的体系结构
第二节J2ME的体系结构
现在个人计算机系统的数量和种类已经发展到无法控制的地步,请你想一想,你编写的程序运行在“信息家电”舞台的情景吧,这些信息家电包括呼叫器,行动电话,像Palm这样的个人数字助手(PDA),电视机顶盒,POS终端以及其他的消费电子设备。
现在全世界上光是手提电话生产商就有许多,更不用说别的家电设备了,而且每一种家电设备又有不同的特性和界面。
所以,你可以想到,Java应用程序的轻便性以及能够解决开发这么许多不同的设备程序的能力,使大家对J2ME有很大的期许。
当然,为了更好的开发这些信息家电,就要求把Java的精髓压缩进一个非常小的程序包中,这就是J2ME。
J2ME是一种通过许多部件和规范的技术,这众多的部件和规范帮助J2ME来满足这众多的消费产品的不同的需要。
和所有的爪哇程式语言技术一样,在它的核心属于一种虚拟机。
就像使用所有Java技术一样,J2ME的核心也在一种虚拟机中。
最初,用于J2ME应用程序虚拟机的被称作Kilobytevirtualmachine或简称KVM。
就像它名称的含义,KVM比较小,通常只有128K或更少。
这比起我们通常了解和使用的Java2标准版Java虚拟机(JVM)的32MB来说就小得多了。
用于连接虚拟机的是一系列配置和简表,它们提供了用于特定J2ME环境的类应用程序接口(见图二)。
每个配置和简表处理一般或具体的消费产品,配置和简表规范是由多种多样的设备生产商和用户共同开发并建立的。
配置是用于一组通用设备的最小的Java平台,常常归为一种横向的设备分组,相对来说,横向分组设备是那些共享相同的内存安排,通信带宽,能量需求以及用户能力的设备,一般认为配置能够提供这众多的设备的所有需求。
图二解释:
J2ME层次Java虚拟机是J2ME技术的核心,但是配置和简表提供特殊环境的类应用程序接口。
配置是用于一组通用设备的最小的Java平台,而简表则为具体的设备家族或特别的应用程序提供更具体的能力。
J2ME领域的新的开发者常常被这些事实困惑的,事实上,Sun的第一个配置(现在只是一种配置的引用实现)带有称为KVM的虚拟机引用实现,KVM满足配置的虚拟机的必要条件。
然而,Sun的KVM也可以被另外一个虚拟机所代替,现在,正是因为配置和虚拟机结合得有点紧密,因此导致了这么多的混乱。
另一方面,简表完善了配置,为某个具体的设备家族或某个具体的工业片段应用程序提供更高的性能。
换言之,简表为具体的纵向市场的设备比如说行动电话提供更多的性能。
这里的关键就是简表必须完善配置,没有配置和虚拟机提供核心类应用程序接口和运行期环境的话,简表也不会工作。
通常,简表为一种给定的垂直分组设备提供用户界面、输入法、持久性机制。
这类简表被认为是发展这些设备应用程序的完整的工具包。
我们见到最多的应用程序简表的例子就移动电话简表和个人数字助手(PDA)简表,其他简表为范围宽广的设备提供非常特殊的功能或应用程序可移植性,这方面的例子就是提供远程方法调用(RMI)功能的简表和提供统一银行事务的简表。
虚拟机、配置、简表…你是不是已经被搞迷糊了?
如果这样的话,我们就来简化一下J2ME体系结构吧。
如果你想为小型信息家电编写Java应用程序的话,你就需要两个前提:
一个配置和至少一个简表。
现在,一般是配置捆绑了虚拟机和一套针对你的平台所能够用的横向分组设备的Java类库。
其次,你至少还需要一个简表来为你的平台提供附加的Java类,这个简表通常会为你的设备提供用户界面、输入和数据库类。
有了这两个前提,你就了使用Java为你的设备编写应用程序的基本的J2ME环境。
J2ME之谜
第三节详细谈谈J2ME配置
第三节详细谈谈J2ME配置
J2ME可以在好几个不同的配置中进行配置。
就像先前提到的,每个配置为一组通用设备提供最小的Java平台,到目前为止,只有两种配置规范。
通过Java规范定义的这两种配置是ConnectedLimitedDeviceConfiguration(有限连接设备配置,CLDC)和ConnectedDeviceConfiguration(连接设备配置CDC)。
CLDC是为使用较小的存储容量的设备设计的(参见图3)。
CLDC用于内存在128到512K之间的消费电子设备,这一类别中典型代表的设备包含呼叫器、行动电话、PDA和POS终端;而另一方面,CDC用于比PC机小但是具有比512K内存多的设备,这一类设备包括互联网络电视系统、机顶盒、POS系统、汽车导航以及娱乐系统。
一般来说,CDC使小型设备只要具有少量的资源,至少比台式机要少的资源就能进行Java编程,而CLDC使小型设备所拥有的资源只要比一张智能卡多一点就可
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- J2ME 应用程序 开发 指南