到 Google 资讯主页   
EasyJF首页   资料   源码   软件    论坛   网站    
   使用帮助    
    该信息为本站MyRSS系统缓存内容,部分图片及附件有可能无法正常使用.easyjf.comwww.javaresearch.org无关,不对该信息负责.通过http://www.javaresearch.org/article//showarticle.jsp?column=3&thread=376访问该信息的原始内容.
页面功能  【加入收藏】 【推荐给朋友】 【字体:  】 【关闭】   
J2ME开发教程 Part I(翻译)
作者:ding 来源:www.javaresearch.org  发布时间:2006-02-27 16:14:06.517


<LINK href="css/sunstyle.css" rel=stylesheet>
<TITLE>Java研究组织-Java微型版</TITLE>
<!--content-->
<!--文章内容放在这儿-->
<blockquote>
<!-- headline -->
<SPAN class=title>J2ME开发教程 Part I</SPAN><BR>
<!-- subtitle -->
<SPAN class=subtitle>――MIDlet 开发起步 </SPAN><BR><BR>
<!-- byline -->
<SPAN class=byline>
<B>原文 Jonathan Knudsen and Dana Nourie</B><BR>February 12, 2002<BR>Download: <A href="http://wireless.java.sun.com/midp/articles/wtoolkit/src/HelloMIDlet.java">HelloMIDlet.java</A> 
<BR>
<b>翻译 Ding(wu_yi_ding@163.com)</b>
<BR>
日期 April 20,2002</SPAN>
<p>
<b>译者说明:本文译自(wireless.java.sun.com网站),其著作权归原著者本人和原文档所在网站所有。译者的翻译未经原著者本人同意。翻译内容仅供自学和参考用,  
请读者不要擅自转载、传播本翻译内容。译者Ding对违反上述原则的人不负任何责任。特此说明。</b></p>   
<P>本文是Java[tm] 2 Platform, Micro Edition (J2ME[tm])技术的入门教程。我们将在文中讲述:如何安装J2ME开发工具;如何编写你的第一个J2ME程序,以及如何编译并在模拟器中运行。本文中将要建立的应用程序被称为MIDlet,它运行在MIDP(Mobile Information Device Profile,J2ME specification中的一种)的参考实现之上。如果你想了解更多的wireless Java技术的背景,请参考<A href="http://wireless.java.sun.com/getstart/">“Introduction to Wireless”</A>。 </P>     
<P>因为运行MIDlet的大多数设备从某种意义上来说都是网络设备,我们将在本教程的第二部分中专门就这一问题进行讨论,在第二部分中,我们会介绍如何建立一个servlet开发环境来编译测试servlet,并最终开发一个MIDlet通过网络连接来访问我们的servlet。</P>
<!-- subhead -->
<SPAN class=subtitle>行前准备</SPAN>
<BR>
<P>MIDP开发的系统要求并不很高,只要你的机子跑得了<A href="http://www.sun.com/forte/ffj/buy.html" target=_new>Forte[tm]for Java, Community Edition</A>即可,Forte for Java是Sun的一个免费的集成开发环境(IDE),可以方便我们开发Java应用程序。</P>    
<P>Forte对系统的需求如下:</P>
<UL>
<LI>300 MHz 以上处理器  
<LI>128 Mb RAM   
<LI>140 Mb 硬盘空间 </LI></UL> 
<P>MIDP开发软件具有Linux,Solairs,window这三种版本。</P>
<P>J2ME/MIDP开发环境由以下三部分组成:
</P>
<OL>
<LI><A href="http://java.sun.com/products/j2se/">Java[tm] 2 Standard Edition (J2SE[tm]) SDK</A> version 1.3 或更高版本. (请注意: 请不要使用beta版的J2SE SDK 1.4.)     
<LI><A href="http://java.sun.com/products/j2mewtoolkit/">J2ME Wireless Toolkit</A>Sun提供用于J2ME无线开发的一个小型的工具包,可以方便的生成和测试MIDlet。  
<LI>任意一种你喜欢的文本编辑器,例如,像是Windows中的笔记本(notepad),或是功能更强大的如<A href="http://www.jedit.org/" target=_blank>jEdit</A>。</LI></OL>
<P>当然,如果你使用Forte for Java的话,也可以使用其内置的编辑器,而且,J2ME Wireless Toolkit (J2MEWTK)是可以被集成在Forte中使用的。</P>
<!-- subhead -->
<SPAN class=subtitle>安装 J2SE SDK </SPAN><BR>
<P>在开始其他事情之前,首先你要安装Java 2, Standard Edition Software Development Kit (J2SE SDK,也就是以前的Java Developer's Kit ,JDK,J2SE SDK是现在正式的名称)。请在这里(<A href="http://java.sun.com/j2se/"> http://java.sun.com/j2se/</A>)下载。目前最新版本是1.3.1,请不要使用1.4的beta版。J2SE SDK共有Linux, Solaris,和Windows三个版本。</P>
<P>只所以需要安装J2SE SDK的原因是:首先,给J2ME Wireless Toolkit提供一个Java运行平台。其次,J2MEWTK需要SDK中的编译器和其他工具来编译MIDlet。</P>
<P>当你下载完毕J2SE,你需要进行安装。在windows环境下,直接运行你所下载之文档即可。安装过程中会提示你几个问题,如果你接收默认,J2SE将被安装在目录<I>c:\jdk1.3.1</I>或是<I>c:\jdk1.3.1_01</I>中。然后请对你系统的<I>autoexec.bat</I> 文件(Windows 95/98中) 或系统属性(Windows NT/2000)中的路径设置做一些调整-把J2SE SDK的<I>bin</I>目录添加到路径中去。如,在Windows98中请在<I>autoexec.bat</I>文件中添加下面一行:  </P>
<BLOCKQUOTE>
<PRE>path %path%;c:\jdk1.3.1\bin</PRE>
</BLOCKQUOTE>
<P>然后测试一些安装是否正常,请打开一个命令行窗口,(如果你改变的是<I>autoexec.bat</I>文件,请先重启动),键入<CODE>java -version</CODE>,如果得到类似如下的输出则证明安装正常。 </P> 
<BLOCKQUOTE><PRE>C:\><B>java -version</B>
java version "1.3.1_01"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.3.1_01)
Java HotSpot(TM) Client VM (build 1.3.1_01, mixed mode)

C:\>
</PRE></BLOCKQUOTE>
<!-- subhead -->
<SPAN class=subtitle>安装 J2ME Wireless Toolkit</SPAN><BR> 
<P>下一步安装J2ME Wireless Toolkit (J2MEWTK). J2MEWTK方便生成和测试MIDP应用程序的工具包,你可以把它当做一个小型的IDE,可以自动化一些生成MIDP应用相关的任务。 </P> 
<P>请在链接<A href="http://java.sun.com/products/j2mewtoolkit/">http://java.sun.com/products/j2mewtoolkit/</A>处下载J2MEWTK,下载完毕后,执行安装文件,安装过程中会自动寻找你的J2SE SDK的安装位置;如果此时出现问题,请手工指定J2SE SDK的安装位置并确保其正确。下一步,会提示你选择J2MEWTK的运行方式:是“standlone”(即独立运行)还是“integrated with Forte for Java”(与Forte集成)。本文假定J2MEWTK是在standlone模式下运行的。默认情况下J2MEWTK 将被安装在<I>c:\J2MEWTK</I>目录下。并在Windows程序菜单上创建了一组快捷方式。</P>
<P>要运行J2MEWTK,请选择KToolbar ,单击,你会看到如下所示画面:</P>
<TABLE cellSpacing=0 cellPadding=10 width=500 align=center border=0>
<TBODY>
<TR>
<TD align=middle>
<IMG height=198 alt="KToolbar screen shot" src="members/ding/images/midp-articles-wtoolkit-ktoolbar-s.gif" width=500 border=0> 
<BR><SPAN class=rtbtitle>Opening Screen of the Wireless Toolkit </SPAN></TD></TR></TBODY></TABLE>        
<P>J2MEWTK以项目(project)为开发单位,每个项目的最终完成的结果是一个MIDlet suite。J2MEWTK一次只能打开一个项目。你可以改变当前项目的属性,编译项目,在设备模拟器中运行项目。同时安装的还有几个项目示例,我们后文将会提到。</P>       
<P>让我们先建立一个新项目一试身手,点击面板上的<B>New Project</B>,J2MEWTK 提示输入项目名和MIDlet的class文件名。请分别填入<CODE>HelloSuite</CODE>和<CODE>HelloMIDlet</CODE>,如下图所示: 
</P>
<TABLE cellSpacing=0 cellPadding=10 width=431 align=center border=0>
<TBODY>
<TR>
<TD align=middle><IMG height=106 alt="New project screen shot" src="members/ding/images/midp-articles-wtoolkit-newproject.gif" width=431 border=0> 
<BR>
<SPAN class=rtbtitle>Creating a New Project</SPAN> </TD></TR></TBODY></TABLE>
<P>当你填毕项目名和class文件名,J2MEWTK这时会给你机会去设置项目的各项设定。这时不要去管他,只需接收默认设定即可。单击<b>OK</b> ,完成新项目的创建。这时请注意J2MEWTK的文本输出面板,你会发现一些有用的输出信息,提示你把源程序存放到哪里。在我的机子上,我得到了如下的输出: </P>     
<BLOCKQUOTE><PRE>Creating project "HelloSuite"
Place Java source files in "c:\J2MEWTK\apps\HelloSuite\src"
Place Application resource files in "c:\J2MEWTK\apps\HelloSuite\res"
Place Application library files in "c:\J2MEWTK\apps\HelloSuite\lib"
</PRE></BLOCKQUOTE><PRE></PRE>
<P>J2MEWTK把每个项目的文件都存放在apps目录的子目录中. 子目录的目录名就是项目的名字。同样,这里我们的项目文件被J2MEWTK 创建到<I>c:\J2MEWTK\apps\HelloSuite</I>目录中。 每个项目的子目录这种标准的结构,如下图所示:</P>    
<TABLE cellSpacing=0 cellPadding=10 width=200 align=center border=0>
<TBODY>
  <TR>
    <TD align=middle><IMG height=78 alt="Virgin project directory structure" src="members/ding/images/midp-articles-wtoolkit-directory_before.gif" width=69 border=0> 
<BR><SPAN class=rtbtitle>Project directory structure</SPAN> </TD></TR></TBODY></TABLE>
<P>在图中,<I>bin</I>目录包含编译过的MIDlet suite (即一个<I>.jar</I>文件)和MIDlet suite描述文件 (即一个<I>.jad</I>文件)。    
<I>lib</I>目录可以用来放置你的项目需要的附加的JAR文件。<I>res</I>目录放置图片或是文本文件等资源文件, 这些文件会被打包到你的MIDlet suite中。最后,<I>src</I>目录存放你的MIDlet的源程序代码。如果你的代码中使用了Package,src此时为Package机制的起始目录。例如,对于类<CODE>users.Root</CODE> 的源码应该被存放为:<I>src/users/Root.java</I></P>
<P>当你使用KToolbar编译一个项目后, J2MEWTK又新建了几个子目录,如下图所示:</P>   
<TABLE cellSpacing=0 cellPadding=10 width=300 align=center border=0><TBODY>
  <TR>
    <TD align=middle><IMG height=126 alt="Built project directory structure" src="members/ding/images/midp-articles-wtoolkit-directory_after.gif" width=92 border=0> 
    <BR><SPAN class=rtbtitle>Project directory structure after building</SPAN> </TD></TR></TBODY></TABLE>   
<P>如视,J2MEWTK 创建了<I>classes</I>, <I>tmpclasses</I>, 和 <I>tmplib</I>这三个子目录,对于大多数时候,你可以不用管这些目录的作用,他们是被J2MEWTK内部使用的。</P>
<!-- subhead --><SPAN class=subtitle>创建一个MIDlet</SPAN><BR> 
<P>让我们先写一个简单的MIDlet程序,作为我们MIDP开发的开始。首先我们需要一个文本编辑器,选择什么样的编辑器当然取决于你。  
Unix系统下程序员流行使用<CODE>emacs</CODE> 或<CODE> vi</CODE>。某些Windows 开发者使用笔记本(textpad),  
但也许你像更专业一些,我个人喜欢使用<A href="http://www.jedit.org/" target=_blank>jEdit</A>,它运行在Java 2环境中,这样我可以在Windows 2000和Mac OS X 系统上使用相同的编辑器。</P>  
<P>当你选定编辑器,请敲入下述代码(你也可以从这里<A href="http://wireless.java.sun.com/midp/articles/wtoolkit/src/HelloMIDlet.java">下载</A>):</P>  
<BLOCKQUOTE><PRE><FONT color=#000000><STRONG>import</STRONG></FONT> javax.microedition.lcdui.*;
<FONT color=#000000><STRONG>import</STRONG></FONT> javax.microedition.midlet.*;

<FONT color=#000000><STRONG>public</STRONG></FONT> <FONT color=#000000><STRONG>class</STRONG></FONT> HelloMIDlet
    <FONT color=#000000><STRONG>extends</STRONG></FONT> MIDlet 
    <FONT color=#000000><STRONG>implements</STRONG></FONT> CommandListener <FONT color=#000000><STRONG>{</STRONG></FONT>
  <FONT color=#000000><STRONG>private</STRONG></FONT> Form mMainForm;
  
  <FONT color=#000000><STRONG>public</STRONG></FONT> <FONT color=#000099>HelloMIDlet</FONT>() <FONT color=#000000><STRONG>{</STRONG></FONT>
    mMainForm <FONT color=#000000><STRONG>=</STRONG></FONT> <FONT color=#000000><STRONG>new</STRONG></FONT> <FONT color=#000099>Form</FONT>(<FONT color=#404040>"HelloMIDlet"</FONT>);
    mMainForm.<FONT color=#000099>append</FONT>(<FONT color=#000000><STRONG>new</STRONG></FONT> <FONT color=#000099>StringItem</FONT>(<FONT color=#404040>null</FONT>, <FONT color=#404040>"Hello, MIDP!"</FONT>));
    mMainForm.<FONT color=#000099>addCommand</FONT>(<FONT color=#000000><STRONG>new</STRONG></FONT> <FONT color=#000099>Command</FONT>(<FONT color=#404040>"Exit"</FONT>, Command.EXIT, <FONT color=#009191>0</FONT>));
    mMainForm.<FONT color=#000099>setCommandListener</FONT>(<FONT color=#404040>this</FONT>);
  <FONT color=#000000><STRONG>}</STRONG></FONT>
  
  <FONT color=#000000><STRONG>public</STRONG></FONT> <FONT color=#000000><STRONG>void</STRONG></FONT> <FONT color=#000099>startApp</FONT>() <FONT color=#000000><STRONG>{</STRONG></FONT>
    Display.<FONT color=#000099>getDisplay</FONT>(<FONT color=#404040>this</FONT>).<FONT color=#000099>setCurrent</FONT>(mMainForm);
  <FONT color=#000000><STRONG>}</STRONG></FONT>
  
  <FONT color=#000000><STRONG>public</STRONG></FONT> <FONT color=#000000><STRONG>void</STRONG></FONT> <FONT color=#000099>pauseApp</FONT>() <FONT color=#000000><STRONG>{}</STRONG></FONT>
  
  <FONT color=#000000><STRONG>public</STRONG></FONT> <FONT color=#000000><STRONG>void</STRONG></FONT> <FONT color=#000099>destroyApp</FONT>(<FONT color=#000000><STRONG>boolean</STRONG></FONT> unconditional) <FONT color=#000000><STRONG>{}</STRONG></FONT>
  
  <FONT color=#000000><STRONG>public</STRONG></FONT> <FONT color=#000000><STRONG>void</STRONG></FONT> <FONT color=#000099>commandAction</FONT>(Command c, Displayable s) <FONT color=#000000><STRONG>{</STRONG></FONT>
    <FONT color=#000099>notifyDestroyed</FONT>();
  <FONT color=#000000><STRONG>}</STRONG></FONT>
<FONT color=#000000><STRONG>}</STRONG></FONT>
</PRE></BLOCKQUOTE>
<P>以文档名为<I>HelloMIDlet.java</I> 将源代码保存在本项目的<I> src</I> 子目录下。在我的电脑上,该文件被存放为:<I>c:\J2mewtk\apps\HelloSuite\src\HelloMIDlet.java</I>。
 </P>
<P>接着,点击<b>KToolbar</b>的<b>Build</b>按键,J2MEWTK将编译你的项目。如果这时有任何编译时错误发生,你会在<b>KToolbar</b>的文本输出区上看到具体的错误输出。修改这些错误直到项目被成功编译。</P>
<P>现在,一切就绪开始测试你的MIDlet suite。点击<b>Run</b>按键。你会发现设备模拟器将会弹出,请参考下图:</P>      
<TABLE cellSpacing=0 cellPadding=10 width=300 align=center border=0>
<TBODY>
  <TR>
    <TD align=middle><IMG height=493 alt="HelloSuite running on the emulator" src="members/ding/images/midp-articles-wtoolkit-DefaultGrayPhone.gif" width=200 border=0> 
    <BR><SPAN class=rtbtitle>HelloSuite running on the emulator</SPAN> </TD></TR></TBODY></TABLE>      
<P>模拟器显示当前MIDlet suite中MIDlet列表。在本例中,我们只有唯一的一个MIDlet。我们这里看到名字为<b>HelloSuite</b>,运行的class 文件是<CODE>HelloMIDlet</CODE>。如果你想了解具体的对应关系,请单击KToolbar中的<b>Settings....</b>按键,然后点击<b>MIDlets</b> 标签,你会看到该项目中MIDlet 的列表。</p>
<P>现在,回到模拟器, 点击<b>Launch</b>下面对应的soft button,开始执行MIDlet。这时屏幕如下图所示。点击<b>Exit</b> 退出MIDlet,然后关闭模拟器窗口或是按一下ESC键,来结束我们的测试。
</P>
<TABLE cellSpacing=0 cellPadding=10 width=300 align=center border=0>
<TBODY>
  <TR>
    <TD align=middle><IMG height=128 alt="HelloMIDlet running on the emulator" src="members/ding/images/midp-articles-wtoolkit-HelloMIDlet.gif" width=96 border=0> 
    <BR><SPAN class=rtbtitle><CODE>HelloMIDlet</CODE> running on the emulator</SPAN> </TD></TR></TBODY></TABLE>
<P>这里我们使用的模拟器是<b>DefaultGrayPhone</b>。J2MEWTK 还包括其他好几个模拟器:DefaultColorPhone,Motorola_i85s等。你可以使用其他模拟器来测试一下我们的<CODE>HelloMIDlet</CODE> ( 注意,你要先安装Palm OS Emulator(POSE),
然后MIDP for PalmOS 模拟器才可以工作,POSE可以在这里<A href="http://www.palmos.com/dev/" target=_blank>下载</A>。)       
要使用其他的模拟器只需在KToolbar的device列表框中选择所需设备,然后再次点击<b>Run</b> 键即可。</P>  
<P>你是不是已经玩腻了<CODE>HelloMIDlet</CODE>,试着运行一下J2MEWTK本身附带的示例,你可以试试<CODE>demos</CODE>, <CODE>games</CODE>, 和 <CODE>photoalbum</CODE> 这些简单的示例. </P>      
<!-- subhead -->
<SPAN class=subtitle>底层一瞥</SPAN><BR>
<P>好,现在我们已经玩了好一会了,让我们坐下来谈谈J2MEWTK到底替我们做了那些工作。虽说没有什么复杂的底层机制,但J2MEWTK确实替我们做了好几项繁琐的步骤,使得工作只是轻而易举的按几下按键。</P>
<P>首先,当我们按下<B>Build</B> 键时发生了什么?       
J2MEWTK 首先找到<I>src</I>目录下所有<I>.java</I>文件并编译他们。然而由于我们的源文件需要在MIDP 环境下编译而不是通常的J2SE 环境,这就使得编译过程有其特殊之处。你可以这样理解,MIDlet使用的<CODE>java.lang.System</CODE> 类是与J2SE中相应的API是不同的。      
也就是说,当J2MEWTK 编译MIDlet时,使用的是MIDP版的<CODE> java.lang.System</CODE>类文件。</P>
<P>当然你也可以手工达到同样的效果,即在命令行窗口中使用<CODE>javac</CODE>命令并添加<CODE>-bootclasspath</CODE> 参数。
但使用J2MEWTK就显得简单多了。</P>
<P>除了编译外,生成的MIDP类文件还必须先被预审核<I>(preverified)</I>,然后他们才能MIDP设备上运行。你也许会记起J2SE有一个bytecode verifier 可以在载入<I>.class</I>文件之前先检查他们。在MIDP世界里, 审核(verification)分为两步。首先,类在编译时被预先审核,
然后当设备载入类时进行第二次审核。</P>
<P>这里J2MEWTK又一次简化了我们的工作,当然你也可以使用命令行程序<b>preverify</b> 来手工完成这一步骤,但使用J2MEWTK使我们不需考虑这些细节。</P>      
<P>最后,MIDlet被打包到MIDlet suite中以便于发布在实际设备上,也就是说把class文件,资源文件打包为一个Jar文件并在该Jar文件的清单(manifest)文件中添加一些额外的信息。      
这里,J2MEWTK又一次发挥了它的职责。如果我们想要给MIDlet suite打包,只需要在菜单中选择<b>Project | Package</b> 命令,      
这样<I>.jad</I> 文件和<I>.jar</I> 文件就轻而易举的在该项目的bin 子目录中生成了。</P>
<!-- subhead --><SPAN class=subtitle>PartII内容简介</SPAN><BR>
<P>译者:略...</P>
<!-- subhead --><SPAN class=subtitle>相关资源</SPAN><BR>
<P>J2MEWTK 附带的User Guide 包含了许多有用的信息如application development cycle, MIDlet attributes, 如何配置模拟器,如何在命令行下使用J2MEWTK,如何与Forte for Java,集成使用等等。</P>
<P>如果你是MIDP的新手你会发现下述文章会对你有所帮助:</P>
<UL>
<LI><A href="http://wireless.java.sun.com/getstart">Introduction to Wireless</A> <BR><BR>       
<LI><A href="http://wireless.java.sun.com/midp/articles/intro/">Introduction to Wireless Programming with the MID Profile</A> <BR><BR> 
<LI><A href="http://wireless.java.sun.com/midp/articles/">All MIDP articles</A> <BR><BR></LI></UL>
<!-- double rule -->
<HR color=#cccccc noShade SIZE=1>
<!-- about -->
<SPAN class=byline>
<B>About the Authors:</B> Jonathan Knudsen <A href="mailto:jonathan.knudsen@sun.com">[e-mail]</A> <A href="http://jonathanknudsen.com/" target=_blank>[home page]</A> is the author of several books, including <A href="http://www.apress.com/catalog/book/189311550X/" target=_blank><I>Mobile Java</I></A>, <A href="http://www.oreilly.com/catalog/lmstorms/" target=_blank><I>The Unofficial Guide to LEGO MINDSTORMS Robots</I></A>, <A href="http://www.oreilly.com/catalog/learnjava/" target=_blank><I>Learning Java</I></A>, and <A href="http://www.oreilly.com/catalog/java2d/" target=_blank><I>Java 2D Graphics</I></A>. Jonathan has written extensively about Java and Lego robots, including a monthly online column called <A href="http://java.oreilly.com/bite-size/">Bite-Size Java</A>, and articles for JavaWorld, EXE, NZZ Folio, and the O'Reilly Network.Jonathan holds a degree in mechanical engineering from Princeton University. <BR><BR>Dana Nourie is a JDC Web developer and writer.She enjoys exploring emerging Java technologies like J2ME, and developing Internet applications with JDBC, servlets, and JavaServer Pages[tm] technologies. In addition, she is adding to the <A href="http://developer.java.sun.com/developer/onlineTraining/new2java/" target=_blank>New-to-Java Programming Center</A> and welcomes ideas and comments from budding developers.   
<br><br>
<b>关于译者:</b><a href="mailto:wu_yi_ding@163.com">Ding</a>(wu_yi_ding@163.com),WWW.chinajavaworld.com论坛J2ME版版主,Java研究组织J2ME项目负责人(http://www.javaresearch.org/column.jspcolumn=3)。
</SPAN><BR>  
</blockquote>

 
相关文章
 
页面功能  【加入收藏】 【推荐给朋友】 【字体:  】 【关闭】   


EasyJF.com 2006 隐私政策 使用EasyJF前必读