从“傻X”到牛X——基础篇(一)准备工作

一、什么是J2ME 
J2ME:Java 2 Micro Edition。JAVA的微型版,用其编写的程序可用于安装有KVM的小型设备上。 
KVM:Java平台上最小的虚拟机,用于CLDC配置的虚拟机。 
CLDC:Connected Limited Device Configuration,有限连接设备配置。它是JAVA定义的一种规范。CLDC定义的硬件参数是,512KB以下的内存,有限能源供应(一般指电池),有限网络连接,简单用户界面,16或32位处理器。CLDC就是用于满足上述条件的设备上。 
我们现在的手机一般都远远超过了上述设备条件。(别拿2000年前的产品和山寨机说事儿。) 
所以,很多手机上都配备了CDC(Connected Device Configuration 连接设备配置),CDC又是怎么会事呢?它同CLDC一样,是一种规范,只不过在硬件上的参数条件都高级CLDC。 
CDC的参数为,2MB以上内存,具有网络连接能力,32位或64位处理机。这样配备的手机显然可以运行的游戏,要比CLDC上的强得多。 
MIDP:它基于CLDC,为我们开发移动设备应用程序提供了一些必要的API。 
MIDlet套件:由MIDP提供,我们要开发手机游戏,都要基于它。等下用到就知道了。 

上面有一堆概念,怕麻烦的同学只需要记住一点,我们开发J2ME应用程序时,主类都要继承MIDlet类就行了。我们今天的目标是写一个能在手机上运行的HelloWorld 

二、开发环境的搭建 
在扫盲篇(一)里,我们已经下载安装了WTK和Eclipse,现在我们要做的就是整合他们,并构建一个基于Eclipse的开发环境。 

1.下载EclipseMe插件。我认为EclipseMe是目前在Eclipse平台上开发J2ME最好插件。目前最新版本是eclipseme.feature_1.7.9。点击eclipseme.feature_1.7.9_site.zip进行下载。 
2.打开Eclipse,选择Help——Software Updates 
从“傻X”到牛X——基础篇(一)准备工作_第1张图片 
出现一个标题栏为Software Updates Add-ons的对话框。点击右边的Add Site按钮。 
从“傻X”到牛X——基础篇(一)准备工作_第2张图片 
再点Archive按钮选择刚才下载的eclipseme.feature_1.7.9_site.zip,再点OK。 
这时,刚才的Software Updates Add-ons对话框中会多出来一项 
 
(上面的图中,由于我已经安过EclipseMe,所以先截图时就已经有这一项了。) 

选中EclipseMe这一项,点右上角的Install开始安装。安装完后会要求重启Eclipse。 
重启后,我们按Ctrl+N新建,会多出J2ME这一项。 
从“傻X”到牛X——基础篇(一)准备工作_第3张图片 
别慌,配置还没完,先取消掉。我们还要把WTK整合进来。Window——Preferences。 
从“傻X”到牛X——基础篇(一)准备工作_第4张图片 
选中左边的J2ME,再填写WTK的安装路径。 
从“傻X”到牛X——基础篇(一)准备工作_第5张图片 
再设置Device Management,点Import。 
从“傻X”到牛X——基础篇(一)准备工作_第6张图片 
查找目录填WTK安装路径下的bin目录,点击Refresh。会出现如下图的四种虚拟手机设备,最后Finish。 
从“傻X”到牛X——基础篇(一)准备工作_第7张图片 

到此,我们的J2ME开发环境就搭建好了。现在开始正式进入J2ME HelloWorld的编写。 

三、HelloWorld 
1.Ctrl+N 新建一个J2ME MIDlet Suite,看清楚,是MIDlet Suite。 
2.填入工程名称。 
从“傻X”到牛X——基础篇(一)准备工作_第8张图片 
3.选择设备,这里我们选默认的彩屏手机。 
从“傻X”到牛X——基础篇(一)准备工作_第9张图片 
4.Finish。 
这样,我们一个J2ME的工程就建好了。 
从“傻X”到牛X——基础篇(一)准备工作_第10张图片 

现在新建一个J2ME MIDlet。(这次是MIDlet了) 
去掉TODO标签,默认代码如下: 
Java代码  
  1. import javax.microedition.midlet.MIDlet;  
  2. import javax.microedition.midlet.MIDletStateChangeException;  
  3.   
  4. public class Hello extends MIDlet {  
  5.   
  6.     public Hello() {  
  7.     }  
  8.   
  9.     protected void destroyApp(boolean arg0) throws MIDletStateChangeException {  
  10.     }  
  11.   
  12.     protected void pauseApp() {  
  13.     }  
  14.   
  15.     protected void startApp() throws MIDletStateChangeException {  
  16.     }  
  17.   
  18. }  

我们可以看出,这就是一个普通的类, 只不过继承父类MIDlet。 
destroyApp(),pauseApp(),startApp()是由MIDlet给我们提供的三个抽象方法。 
说到这里,我们有必要先了解一下J2ME程序运行的三种状态。 
暂停状态(Paused),运行状态(Actived)和终止状态(Destoryed)。 
程序运行,首先进入startApp()方法里,此时程序是运行状态。 
当有电话来了或人为将游戏暂停时,程序进入pauseApp(),此时程序是暂停状态。 
当退出程序时,程序会调用destroyApp(),然后中止。 
值得一提的是,程序开始运行时,第一个状态并不是运行状态,而是暂停状态,不过只暂停了很短暂的时间,程序就开始调用startApp(),进入运行状态。 

我们现在来写一段HelloWorld的代码。 
Java代码  
  1. /** 
  2.  * javax.microedition.lcdui包 中包含了液晶显示屏用户界面的一些类。 
  3.  * UI操作少不了它。 
  4.  */  
  5. import javax.microedition.lcdui.Display;  
  6. import javax.microedition.lcdui.Form;  
  7. import javax.microedition.midlet.MIDlet;  
  8. import javax.microedition.midlet.MIDletStateChangeException;  
  9.   
  10. /** 
  11.  * 继承了MIDlet的类将成为J2ME应用程序的入口类,  
  12.  * 入口方法也不在是以前J2SE的main()方法。 
  13.  */  
  14. public class Hello extends MIDlet {  
  15.     Form f;         //声明一个窗体  
  16.     Display d;      //声明一个显示对象,也可以称为屏幕控制对象吧。  
  17.   
  18.     /** 
  19.      * J2ME程序一定要在构造函数中初始化数据。 
  20.      * 不要写在startApp()里,因为从暂停状态回到运行状态时会调用startApp()方法 
  21.      */  
  22.     public Hello() {  
  23.         f = new Form("Hello");          //新建一个标题为Hello的窗体对象  
  24.         f.append("Hello World");        //在窗体中增加一个"Hello World"字符串  
  25.         d = Display.getDisplay(this);   //获得显示对象  
  26.     }  
  27.   
  28.     protected void startApp() throws MIDletStateChangeException {  
  29.         /** 
  30.          * 程序开始运行时,用显示对象的setCurrent()方法,来确定显示哪一个窗体。 
  31.          * J2ME应用程序不像我们PC上的应用程序可以显示多个窗体, 
  32.          * J2ME一次只能显示一个窗体。 
  33.          */  
  34.         d.setCurrent(f);              
  35.     }  
  36.   
  37.     protected void destroyApp(boolean arg0) throws MIDletStateChangeException {  
  38.         System.out.println("Bye bye!!");    //程序退出时,控制台输出"Bye bye!!"  
  39.     }  
  40.   
  41.     protected void pauseApp() {  
  42.     }  
  43. }  


我们现在点击运行按钮的下箭头,选择运行设置从“傻X”到牛X——基础篇(一)准备工作_第11张图片 
再选中左边的Wireless Tookit Emulator,点击"新建"按钮,此时,会多出一个"New configuration"的设置。 
从“傻X”到牛X——基础篇(一)准备工作_第12张图片 
选中"New configuration",开始设置,运行。 
从“傻X”到牛X——基础篇(一)准备工作_第13张图片 
运行效果如下: 
从“傻X”到牛X——基础篇(一)准备工作_第14张图片 

细心的同学可能发现了,退出程序后,控制台怎么没输出"Bye bye!!"啊? 
再好好看看手机模拟器上那个退出按钮,对,那根本就不是正常退出,而是关机键…… 
那自然是没有触发destroyApp()方法。关于怎样触发,我们下次再讲。不过今天的内容还没完,我们的最终目标是让它能在正真的手机上运行,那么,还差什么?当然是能在手机上安装的 .jar 文件。 

反键点工程名——J2ME——Create Package. 
从“傻X”到牛X——基础篇(一)准备工作_第15张图片 
在工程根目录的deployed目录下就会生成一个J2ME01.jar  有兴趣的同学拿到手机上去试验一下吧。嘿嘿,可是不能正常退出哦。


本文出自Silver Wong的博客:http://www.blogjava.net/conanwsz

你可能感兴趣的:(从“傻X”到牛X——基础篇(一)准备工作)