利用Java编写手机应用程序PalmOS基础篇[2]

[入库:2006年2月23日] [更新:2007年3月24日]

本文简介:

在Color KVM的網站上,您可以抓到測試彩色用的程式ColorTest_prc.zip,解開後請您下載到您的Palm IIIc上,並執行他,結果如下圖:

如果您把這個ColorTest.prc安裝到只支援單色的KVM上,則會看到下面結果:

聰明的讀者一定會發現,同樣的程式,在只能顯示單色的Palm上執行的時候,會用漸層色顯示出來。

最後附帶一提的是,Color KVM的網站上您會發現有兩種版本的Color KVM,分別是:

  • ColorKVM.zip: The ColorKVM (Build 6, multi PDB) without the ROMized kAWT classes.
  • ColorKVM_kAWT090ROMized.zip: The ColorKVM (Build 6, multi PDB) with a ROMized version of kAWT v0.90. It is not necessary to add the kawt.pdb file to run the KawtSample or any other kAWT application.
如果讀者們要減少麻煩,請下載 ColorKVM_kAWT090ROMized.zip,由上面的說明大家可以知道,這兩個檔案的差別在於一個有內附kAWT而另外一個沒有。那麼什麼事kAWT呢? 撰寫過Java程式的人應該都利用過AWT(Abstract Window Tookit)來設計Java程式的圖形使用者介面(GUI),而kAWT就是AWT在Palm上的版本,目的也是讓程式設計師更方便地在Palm上面產生如Button、Combo Box、Edit Box之類的元件。當然,內附kAWT的Color KVM所佔的記憶體容量會大些。接下來,我們要開始撰寫撰寫程式囉!相信讀著們已經摩拳擦掌準備一試身手了, Are you ready? Let’s go!

解決方案

當筆者撰寫此篇文章的時候,利用J2ME在Palm之上撰寫Java程式的方法大致上有以下三種:
  1. 直接利用Java 2 SDK配上Sun的CLDC套件
    http://www.sun.com/software/communitysource/j2me/download.html
  2. 使用JBuilder配合Sun的CLDC套件
    http://www.inprise.com/jbuilder/
  3. Visual Age for Java 配上自己的J2ME套件
    http://www-4.ibm.com/software/ad/vajava/
不過在本文中,我們只針對Java 2 SDK配上Sun的CLDC套件之解決方案來做討論,這是幫各位讀者打好基礎的最佳方式,一旦基礎打好,使用工具來協助開發都是很容易的事情。至於其他的解決方案,我們將會在本系列今後的文章裡頭做詳盡的探討,請有興趣的讀者可以放心。

先期準備工作

工欲善其事,必先利其器。因此在我們開始寫Palm上的Java程式之前,我們必須先花點時間準備好我們程式的執行環境以及編譯環境。順便我們也討論一下Palm上Java程式的撰寫流程。
■ 準備程式執行環境
在前面已經跟大家介紹過如何安裝KVM,在這裡筆者再簡單地跟讀者簡短說明:
請各位讀者先到Java Download Center (http://www.sun.com/software/communitysource/j2me/download.html) 下載 CLDC(CONNECTED LIMITED DEVICE CONFIGURATION v1.0)這兩個檔案。
  • j2me_cldc-1_0-src-winsol.zip
  • j2me_cldc-1_0-src-palm_overlay.zip

在下載之前,如果你已經是會員,直接輸入ID與密碼即可下載,否則請先註冊為會員(完全免費)

抓到這兩個檔案之後,請先解開第一個zip檔於根目錄下,這裡我們假設你把檔案解開至C磁碟機中,於是你會發現C磁碟下多了一個目錄叫做j2me_cldc,接著請解開第二檔案至C磁碟機中的j2me_cldc目錄底下,使用覆蓋的方式即可,揭開後會在j2me_cldc底下新增即覆蓋一些檔案和目錄。
在j2me_cldc目錄下的bin子目錄可以發現兩個Palm的可執行檔(.prc檔)分別是KVM.prc與KVMutil.prc,請將這兩個檔案下載到Palm上,你可以在Palm面板上發現這兩個程式的蹤影。
■ Palm上Java程式的撰寫步驟

撰寫Palm上的Java程式和一般的步驟相同,如圖:

  1. 撰寫程式原始碼
  2. 編譯
  3. 預先審核(Preverify)
  4. 測試與除錯
  5. 散佈
各位讀者比較會感到奇怪的地方在第三個步驟 - 預先審核,這個步驟可能會讓大家覺得有些疑惑。因為在各位撰寫Java Applet或是Java Application的時候從未做過這個步驟。其實,這個步驟很容易就可以完成,不像它的名稱看起來那麼地複雜。
為了讓讀者們更清楚這個動作的用意,請大家看看下面這張圖,這是一張傳統Java Applet或是Java Application由撰寫到執行的細部動作示意圖:


在傳統的Java程式之中,為了安全上的理由,任何載入JVM 的class檔在進入執行環境執行之前,都必須經過Byte code verifier的驗證,以防止有人在程式散佈途中遭到惡意的修改,而使得程式執行後對系統有不良影響。

這個審核的動作在一般的PC上執行,在速度倒是還能夠接受,可是一旦放到Palm這種使用較慢CPU的機器上面就顯得有點吃力了。為了節省寶貴的CPU運算時間(既能省電又能夠讓使用者早點看到程式畫面),因此,在程式設計師產生能夠讓KVM執行的class檔之前,先在PC上做一些前置的驗證工作(比方說加入一些特殊標記或符號),如此一來就可以大幅減少將來在Palm上做驗證時CPU的負擔,如此一來也可以加速程式的的啟動時間。

請大家回顧一下,在我們執行每一個CLDC所附的demo程式之前,我們都會看到KVM的啟動畫面如下:

從畫面中大家可以清楚的發現,當KVM做好初始化動作之後,接著會讀進我們用Java寫成的.prc檔,再來從.prc檔之中讀進byte code檔,最後就是再做一次審核(verify)的動作,只不過這個審核的動作因為有預先審核的關係,速度變的比傳統的Java程式要來的快。希望到這個地方,讀者們可以對整個程式開發步驟有個概觀的認識。
■ 準備程式編譯環境
首先,請先安裝Java 2 SDK(請用1.2.2以上的版本。目前最新版本為1.3,請至www.javasoft.com下載)。
最後,要開始撰寫程式之前,我們必須還要建立自己的工具和類別,這個地方讓人覺得很奇怪,為什麼Sun不直接提供可用的工具和類別呢? 總之每個人都有自己的答案,在這裡我們就不討論了,但是我們還是要自己動手輸入指令,否則接下來的工作都不能做了。
底下我們接假設您的CLDC裝在c:\j2me_cldc這個目錄之下
請在命令模式底輸入指令:
 cd c:\j2me_cldc\tools\palm\src\palm\database
我們要把這個目錄下的所有java全部編譯成class檔,接著要放到CLDC類別目錄底下。所以請鍵入:
 javac -d c:\j2me_cldc\bin\api\classes\ *.java
如果您使用的是Java SDK 1.3,則螢幕上會出現一些錯誤,意思大致上是說程式裡頭用了一些不再建議使用的API(deprecation)為了避免這個錯誤,請改用以下指令
 javac -deprecation -d c:\j2me_cldc\bin\api\classes\ *.java
額外跟各位一提的是,如果您在Windows 98底下進行CLDC的準備工作,您很可能遇到底下一大串錯誤訊息:
C:\j2me_cldc\tools\palm\src\palm\database>javac -d c:\j2me_cldc\bin\api\classes *.java java.lang.StringIndexOutOfBoundsException: String index out of range: -32
 at java.lang.String.charAt(String.java, Compiled Code)
at sun.io.ByteToCharMS950.getUnicode(ByteToCharMS950.java:39)
at sun.io.ByteToCharDoubleByte.convert(ByteToCharDoubleByte.java:115)
at java.io.InputStreamReader.convertInto(InputStreamReader.java:127)
at java.io.InputStreamReader.fill(InputStreamReader.java:176)
at java.io.InputStreamReader.read(InputStreamReader.java:239)
at java.io.Reader.read(Reader.java:104)
at sun.tools.java.ScannerInputReader.read(ScannerInputReader.java:127)
at sun.tools.java.Scanner.useInputStream(Scanner.java:166)
at sun.tools.java.Scanner.(Scanner.java:151)
at sun.tools.java.Parser.(Parser.java:59)
at sun.tools.javac.BatchParser.(BatchParser.java:61)
at sun.tools.javac.BatchEnvironment.parseFile(BatchEnvironment.java:465)

at sun.tools.javac.Main.compile(Main.java:489)
at sun.tools.javac.Main.main(Main.java:733)
error: An exception has occurred in the compiler; please file a bug report (http ://java.sun.com/cgi-bin/bugreport.cgi).
1 error



這是因為編碼的問題而導致的錯誤,請大家嘗試改用底下指令即可解決上述問題:
 javac -deprecation -encoding "ASCII"-d c:\j2me_cldc\bin\api\classes\ *.java

本文关键:利用Java编写手机应用程序PalmOS基础篇
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top