Java ME 编程入门
编写基本 Java Midlet 的指南
引言
JAVA ME(或全称 JAVA Mobile Edition)是 JAVA 语言的一个小型轻量级版本。它主要面向内存和/或处理能力受限的运行环境,例如手机、PDA、电视机顶盒、智能卡等。
下载 SDK 并创建你的第一个项目
在本教程中,我们将学习如何使用最基础的 SDK——Sun Java ME Wireless Toolkit 来编写一个简单的“Hello world”应用程序。该工具包可以从这里下载。
安装 SDK 后,我们可以执行以下步骤
- 通过选择:开始按钮 -> Sun Java (TM) Wireless Toolkit for CLDC -> Wireless toolkit 来启动无线工具包。
- 你应该会看到一个窗口,如下所示:
- 要创建一个新项目,只需点击“New Project”按钮。将打开一个新窗口,你需要填写项目名称和 MIDlet(
MIDlet
类名稍后会解释)类名。在本例中,项目名称将是 Hello World,MIDlet 名称将是HelloWorldMIDlet
。 - 将打开一个附加窗口,其中包含许多用于各种设置的选项。此时,只需点击 OK 按钮。
- 项目创建完成后,主窗口将显示有关放置源代码、资源文件(如图片和声音文件)以及应用程序文件的信息。Java 源代码可以使用任何文本编辑器编写。
典型的 MIDlet 结构
典型的 JAVA ME 应用程序由一个 Java 源文件组成,还可以选择添加 PNG 文件(用于图形文件)、MIDI 和 WAV 文件(用于音频文件)。构建和编译阶段会创建两个文件:包含所有可执行文件的 JAR 文件和 JAD(JAVA 描述符)文件。JAD 文件包含有关项目的信息,如供应商、CLDC 和 MIDP 配置以及用户定义的定义。
JAVA ME 环境的核心框架是 CLDC(Connected Limited Device Configuration)。
CLDC 包含 JAVA ME 环境的核心类、处理 IO 功能、语言功能和其他基本实用程序的类。CLDC 的当前版本是 1.1。
与 CLDC 一起的是一个配置文件。有几种配置文件,例如用于手机和手持设备的 MIDP(Mobile Information Device Profile)、用于其他受限设备的 IMP(Information Module Profile)以及用于 NTT DoCoMo i-mode 手机的 DOJA。
每个 JAVA ME 应用程序都必须至少有一个继承自 MIDlet
类的类。这个类实际上管理着整个应用程序。应用程序状态定义了应用程序的执行模式。JAVA ME 应用程序有三种运行时状态:“Active”、“Paused”和“Destroyed”。
- Active 状态是应用程序的正常运行模式。
- 当发生中断(如来电)时,会调用 Paused 状态。
- 当
MIDlet
应用程序结束其操作时,会调用 Destroyed 状态。
MIDlet
类中有三个抽象方法:
startApp():
当MIDlet
进入 Active 状态时调用。pauseApp():
当MIDlet
进入 Paused 状态时调用。destroyApp(boolean unconditional):
当MIDlet
结束执行时调用。
这三个方法对于初始化和释放资源以及其他用户定义的对象的创建是必需的。
我们的示例程序是一个简单的 MIDlet
,它在手机设备上显示“Hello World”。
正如我之前提到的,每个 MIDlet
都至少有一个继承自 MIDlet
类的类。MIDlet
的名称必须是在“New Project”阶段定义的名称。骨架类如下所示:
public class HelloWorldMIDlet extends MIDlet {
/**
* Occurs when the user terminates this program
* This function invokes when the MIDlet enters the "destroyed" state
*/
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
}
/**
* Occurs when a program is interrupted by an external event
* such as incoming call
* This function invokes when the MIDlet enters the "Paused" state
*/
protected void pauseApp() {
}
/**
* occurs every time when the program is starting.
* This function invokes when the MIDlet enters the "Active" state
*/
protected void startApp() throws MIDletStateChangeException {
}
}
有几个类都继承自 Displayable
类。这些类是可以显示在屏幕上的类。其中一个常见的类是 Canvas
类。这个类在游戏应用程序中非常流行,可以绘制各种屏幕对象,显示图片(PNG 格式),还可以处理动画。其他 Displayable
类包括显示菜单的 List
类和显示纯文本的 Form
类。Display
类管理着 MIDlet
的显示。通过这个类,用户可以决定当前应该显示哪个 Displayable
类。
首先,你必须定义一个 Displayable
类。
private Display display;
然后,你必须初始化它。
/**
* constructor class
*/
public HelloWorldMIDlet() {
display = Display.getDisplay(this);
}
正如我之前提到的,display
类必须显示一个 Displayable
类。所以现在我们必须创建一个继承自 Displayable
类的类。
/**
* This class represents an object to be displayed
* on the application. This class is a low level display object.
* Other high-level classes are: List and Form objects.
*/
private class MainScreen extends Canvas
{
public void paint(Graphics g)
{
g.drawString("Hello World", 5, 5, Graphics.TOP | Graphics.LEFT);
}
}
在构造方法中,我们初始化 MainScreen
类。
mainScreen = new MainScreen();
在启动方法中,我们将 mainScreen
类设置为在屏幕上显示。
display.setCurrent(mainScreen);
现在,剩下的就是编译并运行 MIDlet 了。
结论
这只是一个基本的 MIDlet
。任何有兴趣编写完整 JAVA ME 游戏的人都可以查看我的文章这里。
另一个带有完整源代码的 Java ME 游戏可以在这里找到。