J2ME开发教程PartI(翻译)

来源:互联网 发布:sql数据库入门教程 编辑:程序博客网 时间:2024/05/08 19:31
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

 

  Java研究组织-Java微型版

 

 

 

 

  J2ME开发教程PartI

 

  ——MIDlet开发起步

 

 

  原文JonathanKnudsenandDanaNourie
February12,2002
Download:HelloMIDlet.java

 

  翻译Ding(wu_yi_ding@163.com)

 

  日期April20,2002

 

  译者说明:本文译自(wireless.java.sun.com网站),其著作权归原著者本人和原文档所在网站所有。译者的翻译未经原著者本人同意。翻译内容仅供自学和参考用,

  请读者不要擅自转载、传播本翻译内容。译者Ding对违反上述原则的人不负任何责任。特此说明。

 

本文是Java[tm]2Platform,MicroEdition(J2ME[tm])技术的入门教程。我们将在文中讲述:如何安装J2ME开发工具;如何编写你的第一个J2ME程序,以及如何编译并在模拟器中运行。本文中将要建立的应用程序被称为MIDlet,它运行在MIDP(MobileInformationDeviceProfile,J2MEspecification中的一种)的参考实现之上。如果你想了解更多的wirelessJava技术的背景,请参考“IntroductiontoWireless”。

 

因为运行MIDlet的大多数设备从某种意义上来说都是网络设备,我们将在本教程的第二部分中专门就这一问题进行讨论,在第二部分中,我们会介绍如何建立一个servlet开发环境来编译测试servlet,并最终开发一个MIDlet通过网络连接来访问我们的servlet。

 

  行前准备

 

 

MIDP开发的系统要求并不很高,只要你的机子跑得了Forte[tm]forJava,CommunityEdition即可,ForteforJava是Sun的一个免费的集成开发环境(IDE),可以方便我们开发Java应用程序。

 

Forte对系统的需求如下:

 

     

  • 300MHz以上处理器

     

  • 128MbRAM

     

  • 140Mb硬盘空间

 

MIDP开发软件具有Linux,Solairs,window这三种版本。

 

J2ME/MIDP开发环境由以下三部分组成:

 

 

     

  1. Java[tm]2StandardEdition(J2SE[tm])SDKversion1.3或更高版本.(请注意:请不要使用beta版的J2SESDK1.4.)

     

  2. MEwtoolkit/">J2MEWirelessToolkitSun提供用于J2ME无线开发的一个小型的工具包,可以方便的生成和测试MIDlet。

     

  3. 任意一种你喜欢的文本编辑器,例如,像是Windows中的笔记本(notepad),或是功能更强大的如jEdit。

 

当然,如果你使用ForteforJava的话,也可以使用其内置的编辑器,而且,J2MEWirelessToolkit(J2MEWTK)是可以被集成在Forte中使用的。

 

  安装J2SESDK

 

在开始其他事情之前,首先你要安装Java2,StandardEditionSoftwareDevelopMEntKit(J2SESDK,也就是以前的JavaDeveloper'sKit,JDK,J2SESDK是现在正式的名称)。请在这里(http://java.sun.com/j2se/)下载。目前最新版本是1.3.1,请不要使用1.4的beta版。J2SESDK共有Linux,Solaris,和Windows三个版本。

 

只所以需要安装J2SESDK的原因是:首先,给J2MEWirelessToolkit提供一个Java运行平台。其次,J2MEWTK需要SDK中的编译器和其他工具来编译MIDlet。

 

当你下载完毕J2SE,你需要进行安装。在windows环境下,直接运行你所下载之文档即可。安装过程中会提示你几个问题,如果你接收默认,J2SE将被安装在目录c:/jdk1.3.1或是c:/jdk1.3.1_01中。然后请对你系统的autoexec.bat文件(Windows95/98中)或系统属性(WindowsNT/2000)中的路径设置做一些调整-把J2SESDK的bin目录添加到路径中去。如,在Windows98中请在autoexec.bat文件中添加下面一行:

 

 

path%path%;c:/jdk1.3.1/bin

 

 

然后测试一些安装是否正常,请打开一个命令行窗口,(如果你改变的是autoexec.bat文件,请先重启动),键入java-version,如果得到类似如下的输出则证明安装正常。

 

C:/>java-version

  javaversion"1.3.1_01"

  Java(TM)2RuntiMEEnvironMEnt,StandardEdition(build1.3.1_01)

  JavaHotSpot(TM)ClientVM(build1.3.1_01,mixedmode)

  C:/>

 

 

  安装J2MEWirelessToolkit

 

下一步安装J2MEWirelessToolkit(J2MEWTK).J2MEWTK方便生成和测试MIDP应用程序的工具包,你可以把它当做一个小型的IDE,可以自动化一些生成MIDP应用相关的任务。

 

请在链接MEwtoolkit/">http://java.sun.com/products/j2MEwtoolkit/处下载J2MEWTK,下载完毕后,执行安装文件,安装过程中会自动寻找你的J2SESDK的安装位置;如果此时出现问题,请手工指定J2SESDK的安装位置并确保其正确。下一步,会提示你选择J2MEWTK的运行方式:是“standlone”(即独立运行)还是“integratedwithForteforJava”(与Forte集成)。本文假定J2MEWTK是在standlone模式下运行的。默认情况下J2MEWTK将被安装在c:/J2MEWTK目录下。并在Windows程序菜单上创建了一组快捷方式。

 

要运行J2MEWTK,请选择KToolbar,单击,你会看到如下所示画面:

 

 

 

 

 

 
OpeningScreenoftheWirelessToolkit

 

J2MEWTK以项目(project)为开发单位,每个项目的最终完成的结果是一个MIDletsuite。J2MEWTK一次只能打开一个项目。你可以改变当前项目的属性,编译项目,在设备模拟器中运行项目。同时安装的还有几个项目示例,我们后文将会提到。

 

让我们先建立一个新项目一试身手,点击面板上的NewProject,J2MEWTK提示输入项目名和MIDlet的class文件名。请分别填入HelloSuiteHelloMIDlet,如下图所示:

 

 

 

 

 

 

  CreatingaNewProject

 

当你填毕项目名和class文件名,J2MEWTK这时会给你机会去设置项目的各项设定。这时不要去管他,只需接收默认设定即可。单击OK,完成新项目的创建。这时请注意J2MEWTK的文本输出面板,你会发现一些有用的输出信息,提示你把源程序存放到哪里。在我的机子上,我得到了如下的输出:

 

Creatingproject"HelloSuite"

  PlaceJavasourcefilesin"c:/J2MEWTK/apps/HelloSuite/src"

  PlaceApplicationresourcefilesin"c:/J2MEWTK/apps/HelloSuite/res"

  PlaceApplicationlibraryfilesin"c:/J2MEWTK/apps/HelloSuite/lib"

 

 

J2MEWTK把每个项目的文件都存放在apps目录的子目录中.子目录的目录名就是项目的名字。同样,这里我们的项目文件被J2MEWTK创建到c:/J2MEWTK/apps/HelloSuite目录中。每个项目的子目录这种标准的结构,如下图所示:

 

 

 

 

 
Projectdirectorystructure

 

在图中,bin目录包含编译过的MIDletsuite(即一个.jar文件)和MIDletsuite描述文件(即一个.jad文件)。

  lib目录可以用来放置你的项目需要的附加的JAR文件。res目录放置图片或是文本文件等资源文件,这些文件会被打包到你的MIDletsuite中。最后,src目录存放你的MIDlet的源程序代码。如果你的代码中使用了Package,src此时为Package机制的起始目录。例如,对于类users.Root的源码应该被存放为:src/users/Root.java

 

当你使用KToolbar编译一个项目后,J2MEWTK又新建了几个子目录,如下图所示:

 

 

 

 
Projectdirectorystructureafterbuilding

 

如视,J2MEWTK创建了classes,tmpclasses,和tmplib这三个子目录,对于大多数时候,你可以不用管这些目录的作用,他们是被J2MEWTK内部使用的。

  创建一个MIDlet

 

让我们先写一个简单的MIDlet程序,作为我们MIDP开发的开始。首先我们需要一个文本编辑器,选择什么样的编辑器当然取决于你。

  Unix系统下程序员流行使用emacsvi。某些Windows开发者使用笔记本(textpad),

  但也许你像更专业一些,我个人喜欢使用jEdit,它运行在Java2环境中,这样我可以在Windows2000和MacOSX系统上使用相同的编辑器。

 

当你选定编辑器,请敲入下述代码(你也可以从这里下载):

 

importjavax.microedition.lcdui.*;

  importjavax.microedition.midlet.*;

  publicclassHelloMIDlet

  extendsMIDlet

  impleMEntsCommandListener{

  privateFormmMainForm;

  publicHelloMIDlet(){

  mMainForm=newForm("HelloMIDlet");

  mMainForm.append(newStringItem(null,"Hello,MIDP!"));

  mMainForm.addCommand(newCommand("Exit",Command.EXIT,0));

  mMainForm.setCommandListener(this);

  }

  publicvoidstartApp(){

  Display.getDisplay(this).setCurrent(mMainForm);

  }

  publicvoidpauseApp(){}

  publicvoiddestroyApp(booleanunconditional){}

  publicvoidcommandAction(Commandc,Displayables){

  notifyDestroyed();

  }

  }

 

 

以文档名为HelloMIDlet.java将源代码保存在本项目的src子目录下。在我的电脑上,该文件被存放为:c:/J2MEwtk/apps/HelloSuite/src/HelloMIDlet.java

 

 

接着,点击KToolbarBuild按键,J2MEWTK将编译你的项目。如果这时有任何编译时错误发生,你会在KToolbar的文本输出区上看到具体的错误输出。修改这些错误直到项目被成功编译。

 

现在,一切就绪开始测试你的MIDletsuite。点击Run按键。你会发现设备模拟器将会弹出,请参考下图:

 

 

 

 

 
HelloSuiterunningontheemulator

 

模拟器显示当前MIDletsuite中MIDlet列表。在本例中,我们只有唯一的一个MIDlet。我们这里看到名字为HelloSuite,运行的class文件是HelloMIDlet。如果你想了解具体的对应关系,请单击KToolbar中的Settings....按键,然后点击MIDlets标签,你会看到该项目中MIDlet的列表。

 

现在,回到模拟器,点击Launch下面对应的softbutton,开始执行MIDlet。这时屏幕如下图所示。点击Exit退出MIDlet,然后关闭模拟器窗口或是按一下ESC键,来结束我们的测试。

 

 

 

 

 

 
HelloMIDletrunningontheemulator

 

这里我们使用的模拟器是DefaultGrayPhone。J2MEWTK还包括其他好几个模拟器:DefaultColorPhone,Motorola_i85s等。你可以使用其他模拟器来测试一下我们的HelloMIDlet(注意,你要先安装PalmOSEmulator(POSE),

  然后MIDPforPalmOS模拟器才可以工作,POSE可以在这里下载。)

  要使用其他的模拟器只需在KToolbar的device列表框中选择所需设备,然后再次点击Run键即可。

 

你是不是已经玩腻了HelloMIDlet,试着运行一下J2MEWTK本身附带的示例,你可以试试demos,gaMEs,和photoalbum这些简单的示例.

 

  底层一瞥

 

好,现在我们已经玩了好一会了,让我们坐下来谈谈J2MEWTK到底替我们做了那些工作。虽说没有什么复杂的底层机制,但J2MEWTK确实替我们做了好几项繁琐的步骤,使得工作只是轻而易举的按几下按键。

 

首先,当我们按下Build键时发生了什么?

  J2MEWTK首先找到src目录下所有.java文件并编译他们。然而由于我们的源文件需要在MIDP环境下编译而不是通常的J2SE环境,这就使得编译过程有其特殊之处。你可以这样理解,MIDlet使用的java.lang.System类是与J2SE中相应的API是不同的。

  也就是说,当J2MEWTK编译MIDlet时,使用的是MIDP版的java.lang.System类文件。

 

当然你也可以手工达到同样的效果,即在命令行窗口中使用javac命令并添加-bootclasspath参数。

  但使用J2MEWTK就显得简单多了。

 

除了编译外,生成的MIDP类文件还必须先被预审核(preverified),然后他们才能MIDP设备上运行。你也许会记起J2SE有一个bytecodeverifier可以在载入.class文件之前先检查他们。在MIDP世界里,审核(verification)分为两步。首先,类在编译时被预先审核,

  然后当设备载入类时进行第二次审核。

 

这里J2MEWTK又一次简化了我们的工作,当然你也可以使用命令行程序preverify来手工完成这一步骤,但使用J2MEWTK使我们不需考虑这些细节。

 

最后,MIDlet被打包到MIDletsuite中以便于发布在实际设备上,也就是说把class文件,资源文件打包为一个Jar文件并在该Jar文件的清单(manifest)文件中添加一些额外的信息。

  这里,J2MEWTK又一次发挥了它的职责。如果我们想要给MIDletsuite打包,只需要在菜单中选择Project|Package命令,

  这样.jad文件和.jar文件就轻而易举的在该项目的bin子目录中生成了。

  PartII内容简介

 

译者:略...

  相关资源

 

J2MEWTK附带的UserGuide包含了许多有用的信息如applicationdevelopMEntcycle,MIDletattributes,如何配置模拟器,如何在命令行下使用J2MEWTK,如何与ForteforJava,集成使用等等。

 

如果你是MIDP的新手你会发现下述文章会对你有所帮助:

 

     

  • IntroductiontoWireless

     

  • IntroductiontoWirelessProgrammingwiththeMIDProfile

     

  • AllMIDPartIcles

 

 

 

 

  AbouttheAuthors:JonathanKnudsen[e-mail][hoMEpage]istheauthorofseveralbooks,includingMobileJava,TheUnofficialGuidetoLEGOMINDSTORMSRobots,LearningJava,andJava2DGraphics.JonathanhaswrittenextensivelyaboutJavaandLegorobots,includingamonthlyonlinecolumncalledBite-SizeJava,andarticlesforJavaWorld,EXE,NZZFolio,andtheO'ReillyNetwork.JonathanholdsadegreeinMEchanicalengineeringfromPrincetonUniversity.

DanaNourieisaJDCWebdeveloperandwriter.SheenjoysexploringeMErgingJavatechnologieslikeJ2ME,anddevelopingInternetapplicationswithJDBC,servlets,andJavaServerPages[tm]technologies.Inaddition,sheisaddingtotheNew-to-JavaProgrammingCenterandwelcoMEsideasandcomMEntsfrombuddingdevelopers.

 

  关于译者:Ding(wu_yi_ding@163.com),WWW.chinajavaworld.com论坛J2ME版版主,Java研究组织J2ME项目负责人(http://www.javaresearch.org/column.jspcolumn=3)。

 

  <script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>