在我们谈论如何封装多个 MIDlet之前,我们先得多写几个可用的MIDlet。下面有两个简单的 MIDlet。
第一个显示一个带有简短消息的文本框组件。
MIDlet1.java源程序:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class MIDlet1 extends MIDlet implements CommandListener
{
private Display display; // 引用Display对象
private TextBox tbxMain; // 显示消息的文本框
private Command cmdExit; // 退出MIDlet的命令
// 构造程序
public MIDlet1()
{
display = Display.getDisplay(this);
cmdExit = new Command("Exit", Command.SCREEN, 1);
tbxMain = new TextBox("MIDlet 1", "Welcome", 50, 0);
tbxMain.addCommand(cmdExit);
tbxMain.setCommandListener(this);
}
// 启动MIDlet时由应用程序管理器调用
public void startApp()
{
display.setCurrent(tbxMain);
}
// 一个必要的方法
public void pauseApp()
{ }
// 一个必要的方法
public void destroyApp(boolean unconditional)
{ }
file://检查一下是否选择Exit命令
public void commandAction(Command c, Displayable s)
{
if (c == cmdExit)
{
destroyApp(false);
notifyDestroyed();
}
}
}
第二个MIDlet使用List组件显示消息(MIDlet2.java):
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class MIDlet2 extends MIDlet implements CommandListener
{
private Display display; file://引用Display对象
private List lstMain;
private Command cmdExit; // 退出 MIDlet的命令
// 构造程序
public MIDlet2()
{
display = Display.getDisplay(this);
cmdExit = new Command("Exit", Command.SCREEN, 1);
lstMain = new List("MIDlet 2", Choice.IMPLICIT);
lstMain.append("Welcome Back", null);
lstMain.addCommand(cmdExit);
lstMain.setCommandListener(this);
}
file://启动MIDlet时由应用程序管理器调用
public void startApp()
{
display.setCurrent(lstMain);
}
file://一个必要的方法
public void pauseApp()
{ }
file://一个必要的方法
public void destroyApp(boolean unconditional)
{ }
file://检查一下是否选择Exit命令
public void commandAction(Command c, Displayable s)
{
if (c == cmdExit)
{
destroyApp(false);
notifyDestroyed();
}
}
}
第一个程序名为 MIDlet1.java,第二个程序名为 MIDlet2.java。在你保存这些文件的目录里,运
行下列命令编译并预验证这些文件。
javac -bootclasspath c:mefcs*.java
preverify -classpath c:mefcs;. -d . MIDlet1 MIDlet2
jar cvfm MIDlets.jar manifest.txt MIDlet1.class MIDlet2.class spin.png
创建 JAR文件
创建一个新文件,取名为 manifest.txt,然后输入如下内容:
MIDlet-Name: MIDlet Examples
MIDlet-Version: 1.0
MIDlet-Vendor: My Corporation Inc.
MIDlet-1: MIDlet1, /spin.png, MIDlet1
MIDlet-2: MIDlet2, /spin.png, MIDlet2
MicroEdition-Profile: MIDP-1.0
MicroEdition-Configuration: CLDC-1.0
运行下列命令创建一个 JAR文件:
jar cvfm MIDlets.jar manifest.txt MIDlet1.class MIDlet2.class spin.png
这将创建一个名为 MIDlets.jar的 JAR文件,包括 manifest.txt文件和上面两个类文件。
注意: JAR中的清单文件名应是 manifest.mf。
创建 JAD文件
创建一个新文件,取名 MIDlets.jad:
MIDlet-Name: MIDlet Examples
MIDlet-Version: 1.0
MIDlet-Vendor: My Corporation Inc.
MIDlet-Description: Two simple examples to show how to compile and run a MIDlet
MIDlet-Jar-URL:
MIDlet-Jar-Size: 2604
MIDlet-1: MIDlet1, /spin.png, MIDlet1
MIDlet-2: MIDlet2, /spin.png, MIDlet2
注意这两个 MIDlet的引用:
MIDlet-1: MIDlet1, /spin.png, MIDlet1
MIDlet-2: MIDlet2, /spin.png, MIDlet2
上面每一行都包括在设备上显示的 MIDlet名 ( MIDlet1和 MIDlet2 );在每个MIDlet名旁边,应用
程序管理器都会显示一个图象文件;以及启动 MIDlet的类文件。
运行 MIDlet
你既可以从一个局域网文件系统也可以从一个 Web服务器中运行MIDlet,现在我将分别介绍一下。
从文件系统运行
键入下列命令来预览MIDlet:
midp -transient file://MIDlets.jad
-transient选项告诉模拟器,你想运行一个指定 url中可找到的描述文件。在本例中,
file://MIDlets.jad,这当前目录查找 MIDlets.jad。如果有必要的话,你还可以给出一个 JAD文件的
完整的路径。比如说,我的 JAD文件的完整路径是
file://J2ME/MIDlets/welcome.jad
从 Web服务器上运行
你还可以从一个 Web服务器上运行 MIDlet,在上载 JAR和 JAD文件之后,通过改变 url访问 JAD文
件:
midp -transient
这将访问运行在我的电脑上的Web服务器上的 MIDlets.jad文件,如果你把文件上传到互联网上的
Web服务器,只需简直改变适当域名:
midp -transient
http://www.yourwebserver.com/path/MIDlets.jad
使用 Java程序包的项目管理
按照下列步骤创建最后一个MIDlet:
1. 创建用于新项目的目录,我使用的名称为 MIDletPackage,是c:me的子目录。
2. 在新建目录内,创建三个新的子目录: jclasses、 pclasses、 resources
有了这些附加的目录,能够很容易找到特定的文件。例如,所有的图象文件和其他资源都放入
/resources子目录;所有的由 Java编译程序创建的类文件都置于 /jclasses子目录;经过预验证的类置
于/pclasses子目录中。下面是我的系统中的目录结构:
c:j2me
|
MIDletPackage => Java 源代码和manifest.txt文件
|
jclasses => 从Java编译器编译的类
pclasses =>经过预验证的类
resources =>资源文件 (图像文件等)
3. 更新文件:复制 Java源文件( MIDLet1.java和 MIDlet2.java)到 MIDletPackage目录,并在每
个文件头部添加 package语句,如下:而且,如果你已经使用一个图象文件的话,把这个文件复制进
resources目录中。
MIDlet1.java:
package simpleMIDlets;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class MIDlet1 extends MIDlet implements CommandListener
{
...
}
MIDlet2.java:
package simpleMIDlets;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class MIDlet2 extends MIDlet implements CommandListener
{
...
}
4、参考图象文件和类文件的新的位置更新 manifest.txt和 JAD文件。
manifest.txt:
MIDlet-Name: MIDlet Examples
MIDlet-Version: 1.0
MIDlet-Vendor: My Corporation Inc.
MIDlet-1: MIDlet1, /resources/spin.png, simpleMIDlets.MIDlet1
MIDlet-2: MIDlet2, /resources/spin.png, simpleMIDlets.MIDlet2
MicroEdition-Configuration: CLDC-1.0
MicroEdition-Profile: MIDP-1.0
MIDlets.jad:
MIDlet-Name: MIDlet Examples
MIDlet-Version: 1.0
MIDlet-Vendor: My Corporation Inc.
MIDlet-Description: Packaging multiple MIDlets
MIDlet-Jar-URL:
MIDlet-Jar-Size: 2884
MIDlet-1: MIDlet1, /resources/spin.png, simpleMIDlets.MIDlet1
MIDlet-2: MIDlet2, /resources/spin.png, simpleMIDlets.MIDlet2
注意MIDlet-1和MIDlet-2的更改,被引用的类文件使用 simpleMIDlets.MIDlet1和
simpleMIDlets.MIDlet2包名。
5、编译:编译源程序:
javac -bootclasspath c:mefcs-d jclasses *.java
-d选项告诉编译程序,把类文件写入 jclasses目录。
6、预验证:
preverify -classpath c:mefcs; -d pclasses jclasses
-d选项告诉预验证器把经过预验证的类保存在 pclasses目录下。最后的 jclasses告诉预验证器到
什么地方寻找那些要预验证的类。
7、创建 JAR:运行 jar程序:
jar cvfm MIDlets.jar manifest.txt -C pclasses . resources
创建一个名为 MIDlets.jar的文件,使用文件 manifest.txt作为清单文件的内容 (一个名为
manifest.mf的文件将被保存在 JAR中)。
运行MIDlet,有两种情况:
(1)从文件系统中运行MIDlet:
midp -transient file://MIDlets.jad
(2)从web服务器上运行MIDlet:把JAR文件和JAD文件上传到web服务器,输入下面的命令来浏览
MIDlet:
midp -transient
本文章来自中国IT实验室
http://embed.chinaitlab.com/