Java ME(Micro Edition)是Java语言的一个轻量级版本,专为内存和处理能力有限的设备设计,如手机、PDA、电视顶盒、智能卡等。本文将指导如何使用最基础的SDK——Sun Java ME Wireless Toolkit——来编写一个简单的"Hello World"应用程序。
要开始使用Java ME,首先需要下载并安装SDK。可以从下载Sun Java ME Wireless Toolkit。安装完成后,可以按照以下步骤创建新项目:
启动无线工具包:点击“开始”按钮 -> Sun Java(TM) Wireless Toolkit for CLDC -> 无线工具包。应该会看到一个类似于这样的窗口:
要创建新项目,只需按下“新建项目”按钮。一个新的窗口将打开,需要填写项目名称和一个MIDlet类名(MIDlet类将在稍后解释)。在示例中,项目名称将是“Hello World”,MIDlet名称将是“HelloWorldMIDlet”。
创建项目后,会打开一个包含各种设置选项的窗口。在这个阶段,只需点击“确定”按钮。
项目创建完成后,主窗口将显示源文件、资源文件(如图片和声音文件)以及应用程序文件的位置信息。Java源文件可以在任何文本编辑器中编写。
一个典型的Java ME应用程序由一个Java源文件组成,还可以选择添加PNG文件(用于图形文件)、MIDI和WAV文件(用于音频文件)。构建和编译阶段会创建两个文件:包含所有可执行文件的JAR文件,以及包含项目信息的JAD(JAVA描述符)文件,如供应商、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),用于与其他有限设备一起使用;DOJA,用于与NTT DoCoMo i-mode手机一起使用。
每个Java ME应用程序必须至少有一个类,该类从MIDlet类扩展。这个类实际上管理着整个应用程序。应用程序状态定义了应用程序的执行模式。Java ME应用程序有三个运行时状态:“Active”(活跃)、“Paused”(暂停)和“Destroyed”(销毁)状态。
活跃状态是应用程序的正常运行模式。暂停状态是在发生中断时调用的,例如来电。销毁状态是在MIDlet应用程序结束操作时调用的。
MIDlet类中有三种抽象方法:
startApp(): 当MIDlet进入活跃状态时调用。
pauseApp(): 当MIDlet进入暂停状态时调用。
destroyApp(boolean unconditional): 当MIDlet结束执行时调用。
这三个方法用于初始化和释放资源以及其他用户定义的对象。
示例程序是一个简单的MIDlet,它在手机上显示“Hello World”。如前所述,每个MIDlet至少有一个类,该类从MIDlet类扩展。MIDlet的名称必须是在“新建项目”阶段定义的名称。骨架类看起来像这样:
public class HelloWorldMIDlet extends MIDlet {
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
// 当用户终止此程序时调用
}
protected void pauseApp() {
// 当程序被外部事件中断时调用,如来电
}
protected void startApp() throws MIDletStateChangeException {
// 每次程序启动时调用
}
}
有许多类都从Displayable类扩展。这些类是可以显示在屏幕上的类。其中一个常见的类是Canvas类。这个类在游戏应用程序中非常流行,可以在屏幕上绘制各种对象、显示图片(PNG格式)并且可以处理动画。其他Displayable类包括显示菜单的List类和显示纯文本的Form类。
Display类管理MIDlet的显示。通过这个类,用户可以决定现在应该显示哪个Displayable类。首先,需要定义一个Display类。
private Display display;
然后,需要初始化它:
public HelloWorldMIDlet() {
display = Display.getDisplay(this);
}
如前所述,display类必须显示一个Displayable类。所以现在需要创建一个从Displayable类扩展的类。
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);