|
■ 程式外觀 |
請大家先預覽一個能在Palm上執行的簡單Java程式,程式如下:
|
■ 編 譯 |
為了編譯方便,請讀者先行新增一個批次檔,名為palmjavac.bat,其內容如下:
|
javac -g:none -classpath c:\j2me_cldc\bin\api\classes;. -bootclasspath c:\j2me_cldc\bin\api\classes %1 |
請注意,實際上在批次檔中這兩行要連在一起,所以會發生javac.exe無法編譯的情形。
|
當palmjavac.bat完成之後,我們只要在命令列下打入:
|
palmjavac HelloWorld.java |
之後您就會在目錄底下看到編譯過後的HelloWorld.class。 |
■ 預先審核 |
為了預先審核方便,請讀者再先行新增一個批次檔,名為palmver.bat,其內容如下:
|
c:\j2me_cldc\bin\preverify -classpath c:\j2me_cldc\bin\api\classes;. %1 |
請注意,因為排版的關係,所以把指令分成兩行,實際上在批次檔中這兩行要連在一起,所以會發生preverify.exe無法正確執行的情形。 當palmver.bat完成之後,我們只要在命令列下打入: 之後您就會在目錄底下發現新產生了一個名為output的目錄,裡頭存放的正是經過預先審核的HelloWorld.class。 |
■ 測試 |
為了測試方便,請讀者再新增一個批次檔,名為palmtest.bat,其內容如下:
|
c:\j2me_cldc\bin\kvm -classpath c:\j2me_cldc\bin\api\classes;.\output %1 |
請注意,因為排版的關係,所以把指令分成兩行,實際上在批次檔中這兩行要連在一起,否則會發生kvm.exe無法正確執行的情形。 當palmtest.bat完成之後,我們只要在命令列下打入:
|
就會叫出CLDC內附的Palm模擬器(比起正式的模擬器來說,這個內附的模擬器比較陽春)接著您會在螢幕上看到如下畫面:
使用滑鼠在 Goodbye World 這個按鈕上按下滑鼠左鍵,此程式就會關閉。
其實這個CLDC內附的模擬器可以幫我們輸出一些程式執行時期的相關資料。如果您想要觀看,請將palmtest.bat的內容修改如下:
|
c:\j2me_cldc\bin\kvm -verbose -classpath c:\j2me_cldc\bin\api\classes;.\output %1 >> result.txt |
請注意,因為排版的關係,所以把指令分成兩行,實際上在批次檔中這兩行要連在一起,否則會發生kvm.exe無法正確執行的情形。
這樣您就能夠在程式執行之後,打開result.txt觀看KVM所輸出的一些訊息,如果您要直接讓這些訊息輸出到螢幕上,請將palmtest.bat裡頭的">>result.txt"拿掉即可。下面是HelloWorld執行時螢幕上所輸出的資訊: |
|
GC heap size: 150000 bytes Loading version information Loading constant pool Loading class info Class info ok Loading interfaces Loading fields Loading extra attributes Extra attributes loaded Fields loaded ok Loading methods Method ’main’ Method ’< init >’ Method ’paint’ Method ’penDown’ Method ’< clinit >’ Methods loaded ok Loading extra attributes Extra attributes loaded Closing classfile Class loaded ok Invoking static initializer Invoking static initializer Invoking static initializer Invoking static initializer Invoking static initializer Invoking static initializer Invoking static initializer |
這些訊息對於程式設計師在對程式除錯的時候會發揮相當的作用。 |
■ 程式散佈 |
在測試階段,kvm.exe所使用的是經過預先審核的class檔。但是實際上Palm上所執行的程式都是.prc檔,為了要讓我們的程式可以在別人的Palm上執行,所以最後一個步驟就是要把我們的class檔轉換成prc檔。 |
要執行最後這個步驟,我們必須借助在之前我們所編譯出來的相關工具,這個工具名為 MakePalmApp.class。 |
為了轉換方便,請讀者新增一個批次檔,名為palmapp.bat,其內容如下:
|
java -cp c:\j2me_cldc\bin\api\classes palm.database.MakePalmApp -v -bootclasspath c:\j2me_cldc\bin\api\classes %1 |
請注意,因為排版的關係,所以把指令分成三行,實際上在批次檔中這三行要連在一起,否則會發生palm.database.MakePalmApp無法正確執行的情形。
|
當palmapp.bat完成之後,我們只要在命令列下打入: 螢幕上會出現下列訊息:
|
HelloWorld HelloWorld" Small icon Generating output file "HelloWorld.prc". |
表示轉換過程成功 (請注意,預先審核過的HelloWorld.class要和palmapp.bat放在相同目錄下,否則螢幕上會出現ERROR: java.io.IOException: Cannot find file HelloWorld.class的錯誤訊息。)
|
這個時候您就會看到output目錄下產生了一個名為HelloWorld.prc的檔案,這就是我們所需要能在Palm上執行的程式了。請將這個檔案下載到您的Palm上,您會在Palm的螢幕上看到如下: |
用觸控筆在上面輕點一下,就會看到下面畫面: |
今後如果讀者們要將您使用CLDC所撰寫的Java程式分享給大家時,只要提醒使用者在他們的Palm上裝上KVM.prc,至於KVMutil.prc因為是用來協助程式設計師除錯用的工具,所以使用者可裝可不裝。之後程式設計師只要將您自己做好的的.prc檔給使用者即可。如果使用者的電腦上沒有裝上KVM.prc,則會出現下面畫面:
請諸位讀者在散佈您的程式時務必注意。 |
■ 除錯 |
寫程式的人都知道,程式很容易寫,但是bug卻很難除,在我們開發PC用的應用程式時,已經有非常優秀的除錯工具可以幫助我們除錯,但是在Palm上,以目前來說似乎沒有什麼比較有效的除錯工具。於是想起過去在螢幕上列印出一些訊息以協助除錯的日子。當我們在PC上Java Application的時候,我們可以利用System.out.println()這個函式幫我們在螢幕上輸出資料。 那麼在Palm上也可以這樣做嗎? 答案是肯定的。 如果可以,那資料都輸出到哪裡了呢? 嘿嘿!! KVMutil派上用場的時機到了。 請在您的Palm執行KVMutil這隻程式,並設定Screen Output的值,也就是說最多可以輸出13行 一旦這樣設定之後,您就可以在程式裡頭使用System.out.println()函式來輸出資料。 我們把之前的HelloWorld.java改寫成下面的樣子: |
|
import com.sun.kjava.*; public
class HelloWorld extends Spotlet { //用來關閉程式的按鈕 Button exitButton; // 取得Grpahic物件,以便繪圖之用 static Graphics g = Graphics.getGraphics();
//動態產生一個Spotlet, 並註冊事件處理函式. public static void main(String[] args) {
System.out.println("HelloWorld Start") ; HelloWorld hw = new HelloWorld() ; hw.register(NO_EVENT_OPTIONS); }
public HelloWorld() { exitButton = new Button("Goodbye World",70,120); paint(); }
private void paint() { g.clearScreen(); g.drawString("Hello World",60, 80); exitButton.paint(); }
/* 當觸控筆觸碰液晶螢幕,就會引發pen down事件, 接著叫用以下事件處理函式 */
public void penDown(int x, int y) { System.out.println("Pen Down") ; // 確認筆按下的位置在按鈕的邊界之內 if (exitButton.pressed(x,y)) { System.exit(0); } } } |
|
程式執行之後,重新執行KVMutil,並按下 < View output >,就可以看到 HelloWorld所輸出的訊息,如下圖:
如果您是使用POSE(請參考附錄,對POSE會有詳盡的說明)執行KVM的話,您會在POSE所在的路徑之下發現兩個檔案,分別是STDOUT.txt與STDERR.txt,裡頭存放的內容正是前面這兩張圖裡頭所看到的文字內容。
眼尖的讀者會發現,KVMutil裡有個選項叫做Show heap stats,如下圖: |
當您點選了這個選項之後,每當您的程式執行之前,KVM都會對Heap的情形做出回報,底下是HelloWorld執行前KVM出現的訊息視窗: |
如果一開始設定了Save Output,而後來卻砍掉KVMutil.prc,那您的KVM.prc在執行時結果將會如下圖:
相信有了KVMutil的協助,一定可以幫助大家在程式寫作的路上更順手。 |