`
conanwsz
  • 浏览: 8277 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

从“傻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

出现一个标题栏为Software Updates Add-ons的对话框。点击右边的Add Site按钮。

再点Archive按钮选择刚才下载的eclipseme.feature_1.7.9_site.zip,再点OK。
这时,刚才的Software Updates Add-ons对话框中会多出来一项

(上面的图中,由于我已经安过EclipseMe,所以先截图时就已经有这一项了。)

选中EclipseMe这一项,点右上角的Install开始安装。安装完后会要求重启Eclipse。
重启后,我们按Ctrl+N新建,会多出J2ME这一项。

别慌,配置还没完,先取消掉。我们还要把WTK整合进来。Window——Preferences。

选中左边的J2ME,再填写WTK的安装路径。

再设置Device Management,点Import。

查找目录填WTK安装路径下的bin目录,点击Refresh。会出现如下图的四种虚拟手机设备,最后Finish。


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

三、HelloWorld
1.Ctrl+N 新建一个J2ME MIDlet Suite,看清楚,是MIDlet Suite。
2.填入工程名称。

3.选择设备,这里我们选默认的彩屏手机。

4.Finish。
这样,我们一个J2ME的工程就建好了。


现在新建一个J2ME MIDlet。(这次是MIDlet了)
去掉TODO标签,默认代码如下:
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class Hello extends MIDlet {

	public Hello() {
	}

	protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
	}

	protected void pauseApp() {
	}

	protected void startApp() throws MIDletStateChangeException {
	}

}

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

我们现在来写一段HelloWorld的代码。
/**
 * javax.microedition.lcdui包 中包含了液晶显示屏用户界面的一些类。
 * UI操作少不了它。
 */
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Form;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

/**
 * 继承了MIDlet的类将成为J2ME应用程序的入口类, 
 * 入口方法也不在是以前J2SE的main()方法。
 */
public class Hello extends MIDlet {
	Form f;			//声明一个窗体
	Display d;		//声明一个显示对象,也可以称为屏幕控制对象吧。

	/**
	 * J2ME程序一定要在构造函数中初始化数据。
	 * 不要写在startApp()里,因为从暂停状态回到运行状态时会调用startApp()方法
	 */
	public Hello() {
		f = new Form("Hello");			//新建一个标题为Hello的窗体对象
		f.append("Hello World");		//在窗体中增加一个"Hello World"字符串
		d = Display.getDisplay(this);	//获得显示对象
	}

	protected void startApp() throws MIDletStateChangeException {
		/**
		 * 程序开始运行时,用显示对象的setCurrent()方法,来确定显示哪一个窗体。
		 * J2ME应用程序不像我们PC上的应用程序可以显示多个窗体,
		 * J2ME一次只能显示一个窗体。
		 */
		d.setCurrent(f);			
	}

	protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
		System.out.println("Bye bye!!");	//程序退出时,控制台输出"Bye bye!!"
	}

	protected void pauseApp() {
	}
}


我们现在点击运行按钮的下箭头,选择运行设置
再选中左边的Wireless Tookit Emulator,点击"新建"按钮,此时,会多出一个"New configuration"的设置。

选中"New configuration",开始设置,运行。

运行效果如下:


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

反键点工程名——J2ME——Create Package.

在工程根目录的deployed目录下就会生成一个J2ME01.jar  有兴趣的同学拿到手机上去试验一下吧。嘿嘿,可是不能正常退出哦。
分享到:
评论
1 楼 qxinghui 2011-03-15  
为什么我总是要执行:

我们现在点击运行按钮的下箭头,选择运行设置
再选中左边的Wireless Tookit Emulator,点击"新建"按钮,此时,会多出一个"New configuration"的设置。

选中"New configuration",开始设置,运行。

这几步呢?


而不是直接在 run as中显示用MIDlet运行

相关推荐

Global site tag (gtag.js) - Google Analytics