导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→在MIDlet套件中封装多个MIDlet[vegetarian]

 *第24406篇: 在MIDlet套件中封装多个MIDlet

  
楼 主:vegetarian 2008年7月21日14:40
 在MIDlet套件中封装多个MIDlet

在我们谈论如何封装多个 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 

  使用 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实验室


>>>>>>对该主题发表你的看法

本主题贴数1,分页: [第1页]


[上一篇主题]:单片机做人机界面的理想解决方案---智能彩色显示器

[下一篇主题]:北斗系统的应用