程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> 利用Java編寫手機應用程序 Motorola iDEN篇(2)

利用Java編寫手機應用程序 Motorola iDEN篇(2)

編輯:J2ME
MIDlet程序結構

在手機上執行的程序我們統稱MIDlet,其程序結構很簡單,與大家熟悉的Applet結構有異曲同工之妙。
每一個MIDlet程序都必須繼承自Javax.microedition.midlet.MIDlet類別,並實做三個函式,它們分別是:

protected void startApp()
protected void pauseApp()
protected void destroyApp(Boolean unconditional)
而一個MIDlet程序的起始與結束之流程我們以下圖來表示:

編寫並編譯MIDlet

請先到您的Motorola J2ME SDK安裝目錄下的demo\midlets目錄底下新建一個名為HelloMIDlet.Java的文件,其內容為:

HelloMIDlet.Java

import Javax.microedition.lcdui.*;
import Javax.microedition.midlet.*;

public class HelloMIDlet extends MIDlet
{

HelloMIDlet()
{
}

protected void startApp() throws MIDletStateChangeException
{
}

protected void pauseApp()
{
}

protected void destroyApp(boolean unconditional)
throws MIDletStateChangeException
{
}
}

在demo\midlets目錄之中您會看到一個名為compileAll.bat的批處理文件,前面有提到,這個批處理文件除了可以幫助您編譯所有內附范例程序之外,還可以簡化您自己所編寫的MIDlet之編譯流程。
請在命令列視窗輸入:compileAll_HelloMIDlet.Java

如果成功編譯,屏幕上輸出的結果如下圖所示:

從屏幕上的輸出,您可以發現,要讓MIDlet可以在手機上執行,大體上還是要經過兩個動作(與Spotlet相似),分別是編譯(compiling)以及預先審核(Preverifying)。
有關預先審核這個動作,筆者已經在RUN!PC 11月號的文章「利用Java 編寫PalmOS應用程序基礎篇」之中有向讀者們提過,如果對這個方面有所疑問的朋友,請再將您的RUN!PC 11月號翻出來復習一下吧!

從這個簡短的MIDlet制作流程裡頭,相信大家可以發現,比起純粹用Sun的CLDC編寫能在KVM上執行的Spotlet要簡單上許多。原因是compileAll.bat這個批處理文件幫我們做掉大部分dirty work。
那幺,如果您寫好的程序並非放在demo\midlets目錄之中,是否就無法編譯了? 從compileAll.bat裡頭,我們可以發現它幫我們完成上述兩項工作的指令。如果我們寫好的程序放在demo\midlets目錄以外的地方,您可以執行下面的指令,您仍然可以成功地制作MIDlet:
(我們假設您的Motorola J2ME SDK安裝在D:\MotoSDK目錄之中,並將您自行撰寫的HelloMIDlet.Java置於d:\jdk1.3.0_01\my目錄之中。同時我們假設您在d:\jdk1.3.0_01\my目錄底下執行下面指令。)

編譯:

Javac -O -bootclasspath d\MotoSDK\lib HelloMIDlet.Java

注意: 1. -bootclasspath指向類別函式庫的所在位置。

預先審核:

d\MotoSDK\bin\preverifIEr -classpath d\MotoSDK\lib;. -d . HelloMIDlet

注意: 1. -classpath指向類別函式庫的所在位置,也要指向我們所撰寫的MIDlet所在的位置。

2. -d指向您希望預先編譯類別檔產生之後所放置的路徑,如果寫"."表示本目錄,會覆蓋掉原先未經過預先編譯的類別檔。如果您沒有指定,則默認值為".\output"目錄。

當然,如果您嫌自己手動操作很麻煩,您可以將compileAll.bat復制到其它目錄之中,並更改其編譯指令與預先審核指令之中和類函數庫有關的相關設定即可。
提到compileAll.bat,順便向各位讀者說明一下,在前面有提到,compileAll.bat可以幫助您編譯所有位於demo\midlets目錄下的范例程序,您只要在命列列下直接輸入: compileAll即可。compileAll.bat會自動當您編譯的package有以下幾項:
com.mot.J2ME.midlets.bounce
com.mot.J2ME.midlets.imagetests
com.mot.J2ME.midlets.paddleball
com.mot.J2ME.midlets.scribble
com.mot.J2ME.midlets.tests
com.mot.J2ME.midlets.tutorials

如果您希望compileAll.bat自動幫您編譯其它package底下的程序,請您開啟compileAll.bat,修改其COMPILECLASS環境變數的設定即可。

修改並執行MIDlet

寫好程序之後,大家最希望的事情當然就是讓它在手機上執行,不過由於目前大家無法取得Motorola這些支持Java的手機,所以我們只能在Motorola J2ME SDK內附的模擬器上執行我們寫好的MIDlet。相信手機正式推出時,應該可以順利地在手機上執行。底下筆者將告訴您如何使用Motorola J2ME SDK內附的模擬器來測試您所編寫的MIDlet。
在這之前,由於之前我們所編寫的范例程序只是簡單的MIDlet空殼,我們必須讓它能夠在模擬器上顯示出一些信息才可以,因此請修改上一個程序范例,使它的內容如下:

HelloMIDlet.java 
import javax.microedition.lcdui.*;
import Javax.microedition.midlet.*; 

public class HelloMIDlet extends MIDlet
{

private Display firstDisplay ;
private Form firstForm ;
HelloMIDlet()
{
firstDisplay = Display.getDisplay(this) ;
firstForm = new Form("Hello MIDlet") ;
StringItem firstStrItem = new StringItem("Hello","MIDlet") ;
firstForm.append(firstStrItem) ;
}

protected void startApp() throws MIDletStateChangeException
{
firstDisplay.setCurrent(firstForm) ;
}

protected void pauseApp()
{
}

protected void destroyApp(boolean unconditional)
throws MIDletStateChangeException
{
}
}

 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved