在我們談?wù)撊绾畏庋b多個 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的命令
// 構(gòu)造程序
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時由應(yīng)用程序管理器調(diào)用
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的命令
// 構(gòu)造程序
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時由應(yīng)用程序管理器調(diào)用
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。在你保存這些文件的目錄里,運(yùn)
行下列命令編譯并預(yù)驗(yàn)證這些文件。
javac -bootclasspath c:mefcs*.java
preverify -classpath c:mefcs;. -d . MIDlet1 MIDlet2
jar cvfm MIDlets.jar manifest.txt MIDlet1.class MIDlet2.class spin.png
創(chuàng)建 JAR文件
創(chuàng)建一個新文件,取名為 manifest.txt,然后輸入如下內(nèi)容:
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
運(yùn)行下列命令創(chuàng)建一個 JAR文件:
jar cvfm MIDlets.jar manifest.txt MIDlet1.class MIDlet2.class spin.png
這將創(chuàng)建一個名為 MIDlets.jar的 JAR文件,包括 manifest.txt文件和上面兩個類文件。
注意: JAR中的清單文件名應(yīng)是 manifest.mf。
創(chuàng)建 JAD文件
創(chuàng)建一個新文件,取名 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
上面每一行都包括在設(shè)備上顯示的 MIDlet名 ( MIDlet1和 MIDlet2 );在每個MIDlet名旁邊,應(yīng)用
程序管理器都會顯示一個圖象文件;以及啟動 MIDlet的類文件。
運(yùn)行 MIDlet
你既可以從一個局域網(wǎng)文件系統(tǒng)也可以從一個 Web服務(wù)器中運(yùn)行MIDlet,現(xiàn)在我將分別介紹一下。
從文件系統(tǒng)運(yùn)行
鍵入下列命令來預(yù)覽MIDlet:
midp -transient file://MIDlets.jad
-transient選項(xiàng)告訴模擬器,你想運(yùn)行一個指定 url中可找到的描述文件。在本例中,
file://MIDlets.jad,這當(dāng)前目錄查找 MIDlets.jad。如果有必要的話,你還可以給出一個 JAD文件的
完整的路徑。比如說,我的 JAD文件的完整路徑是
file://J2ME/MIDlets/welcome.jad
從 Web服務(wù)器上運(yùn)行
你還可以從一個 Web服務(wù)器上運(yùn)行 MIDlet,在上載 JAR和 JAD文件之后,通過改變 url訪問 JAD文
件:
midp -transient
這將訪問運(yùn)行在我的電腦上的Web服務(wù)器上的 MIDlets.jad文件,如果你把文件上傳到互聯(lián)網(wǎng)上的
Web服務(wù)器,只需簡直改變適當(dāng)域名:
midp -transient
http://www.yourwebserver.com/path/MIDlets.jad
使用 Java程序包的項(xiàng)目管理
按照下列步驟創(chuàng)建最后一個MIDlet:
1. 創(chuàng)建用于新項(xiàng)目的目錄,我使用的名稱為 MIDletPackage,是c:me的子目錄。
2. 在新建目錄內(nèi),創(chuàng)建三個新的子目錄: jclasses、 pclasses、 resources
有了這些附加的目錄,能夠很容易找到特定的文件。例如,所有的圖象文件和其他資源都放入
/resources子目錄;所有的由 Java編譯程序創(chuàng)建的類文件都置于 /jclasses子目錄;經(jīng)過預(yù)驗(yàn)證的類置
于/pclasses子目錄中。下面是我的系統(tǒng)中的目錄結(jié)構(gòu):
c:j2me
|
MIDletPackage => Java 源代碼和manifest.txt文件
|
jclasses => 從Java編譯器編譯的類
pclasses =>經(jīng)過預(yù)驗(yàn)證的類
resources =>資源文件 (圖像文件等)
3. 更新文件:復(fù)制 Java源文件( MIDLet1.java和 MIDlet2.java)到 MIDletPackage目錄,并在每
個文件頭部添加 package語句,如下:而且,如果你已經(jīng)使用一個圖象文件的話,把這個文件復(fù)制進(jìn)
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選項(xiàng)告訴編譯程序,把類文件寫入 jclasses目錄。
6、預(yù)驗(yàn)證:
preverify -classpath c:mefcs; -d pclasses jclasses
-d選項(xiàng)告訴預(yù)驗(yàn)證器把經(jīng)過預(yù)驗(yàn)證的類保存在 pclasses目錄下。最后的 jclasses告訴預(yù)驗(yàn)證器到
什么地方尋找那些要預(yù)驗(yàn)證的類。
7、創(chuàng)建 JAR:運(yùn)行 jar程序:
jar cvfm MIDlets.jar manifest.txt -C pclasses . resources
創(chuàng)建一個名為 MIDlets.jar的文件,使用文件 manifest.txt作為清單文件的內(nèi)容 (一個名為
manifest.mf的文件將被保存在 JAR中)。
運(yùn)行MIDlet,有兩種情況:
(1)從文件系統(tǒng)中運(yùn)行MIDlet:
midp -transient file://MIDlets.jad
(2)從web服務(wù)器上運(yùn)行MIDlet:把JAR文件和JAD文件上傳到web服務(wù)器,輸入下面的命令來瀏覽
MIDlet:
midp -transient
本文章來自中國IT實(shí)驗(yàn)室
http://embed.chinaitlab.com/