Java应用程序描述器文件(JAD)虽然没有必要,你仍然可以在 JAR文件中包含一个 JAD文件,就像清单文件一样,这个文件也包含 MIDlet的信息。创建一个 JAD文件是基于两个原因。1、向应用程序管理器提供信息,说明 JAR文件的内容,使用这些信息,就可以判断一个 MIDlet是否适合运行在这个设备上。例如,通过查看属性 MIDlet-Data-Size,应用程序管理器可以确定 MIDlet是否需要比设备可以提供的更多的内存。 2、提供一种方法,可以把参数传送到 MIDlet而不必更改 JAR文件,在本文的后半段我们将看一个这样的例子。 JAD文件使用表 1中相同的属性。如果你需要创建你自己的属性,也可以办得到,只要使用不以 MIDlet为开头的属性名就可以了,下面的 showProperties.jad文件就是自定义属性的例子。和清单文件一样,有某些属性必须被定义,如果这些属性不可用的话,应用程序管理器将不加载这个 MIDlet,它们是: MIDlet-Name MIDlet-Version MIDlet-Vendor MIDlet-
MIDlet-Version: 1.0.1
MIDlet-Vendor: ABC WorkGroup.
MIDlet-1: ShowProps, , showProperties
MicroEdition-Profile: MIDP-1.0
MicroEdition-Configuration: CLDC-1.0
MIDlet-Description: A simple property list example
MIDlet-Data-Size: 1500
MIDlet-Version: 1.0.1
MIDlet-Vendor: ABC WorkGroup.
MIDlet-Jar-URL: file://showProperties.jar
MIDlet-Jar-Size: 1132
MIDlet-1: ShowProps, , showProperties
JadFile-Version: 1.5
MIDlet-Data-Size: 500
public class showProperties extends MIDlet
{
public void startApp() throws MIDletStateChangeException
{
System.out.println("Vendor: " + getAppProperty("MIDlet-Vendor"));
System.out.println("Description: " + getAppProperty("MIDlet-Description"));
System.out.println("JadFile Version: " + getAppProperty("JadFile-Version"));
System.out.println("MIDlet-Data-Size: " + getAppProperty("MIDlet-Data-Size"));
}
public void pauseApp()
{ }
public void destroyApp(boolean unconditional)
{ }
}
下面这些是一些比较重要的地方:manifest.mf文件作为 JAR文件 showProperties.jar的一部分储存的。 JAD文件showProperties.jad使用MIDlet-Jar-URL: file://showProperties.jar 引用showProperties.jar。 当你浏览这个 JAD文件的时候,它使用上面那个命令找出相关联的 JAR文件并读取清单文件的内容。 属性MIDlet-Name、MIDlet-Version和MIDlet-Vendor 既在 JAR中的清单文件中又在 JAD文件中,这些属性的值都必须完全相同。 MIDlet-Description属性来自清单文件,是可选的。 JadFile Version属性不在表 1中,因此它是一个自定义属性。因为 JAD文件内的属性可从MIDlet访问,所以你可以不用改变 JAR文件而添加属性到 JAD中。 属性 MIDlet-Data-Size在清单文件和 JAD文件中都有,就像前面指出的那样,当两个文件中有完全相同的属性时, JAD文件中的属性将使用。切记这不适用于MIDlet-Name、MIDlet-Version和MIDlet-Vendor。
在 MIDlet套件中封装多个 MIDlet
在我们谈论如何封装多个 MIDlet之前,我们先得多写几个可用的MIDlet。下面有两个简单的 MIDlet。第一个显示一个带有简短消息的文本框组件。MIDlet1.java源程序:
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();
}
}
}
