無論學習什麼新事物
都講究循序漸進
學習J
ME也不例外
在此我想先介紹一下使用J
ME開發Palm上的一個小的應用程序
再深入探討開發更加復雜的應用程序
好
那我麼就開始吧
第一 獲得 JME 你可以從Sun網站上下載到 J
ME CLDC文件
第一個文件是 j
me_cldc_
_
src
winsol
zip
它包括所有開發 CLDC應用程序時需要的類庫
除了包括類庫以外
它還包括源代碼以及 Windows和 UNIX下的可執行代碼
用於 MIDP規定的 Java虛擬機引用實現
看了前幾篇文章的讀者肯定都知道
這裡提到的Java虛擬機就是 K虛擬機 ( KVM )
有了這個文件
在開發過程中
你就可以在個人電腦上調試程序
而不用把這些程序下載到你的手持設備上
第二個文件是 j
me_cldc
_
src
palm_overlay
zip
它包括一個用於運行 Palm操作系統的設備的 KVM的實現
以及把
class文件通過一個 Java編譯程序生成可執行 Palm文件的工具
注意
這是一個用於 Palm操作系統的 CLDC個別實現
如果使用針對其它的設備的實現的話
你的 Java應用程序也可以在其他設備上運行
為了開發用於 Palm OS設備的應用程序
你必需在你的計算機上安裝這兩個Zip文件
在本文中
我假設你已經在 C盤中安裝了 CLDC文件夾
注意
為了開發 CLDC應用程序
你並不需要一個特定的 Java編譯程序
你可以使用 J
SE帶有的編譯程序
唯一的差別就是
你必須在編譯的時候更換成J
ME類庫所在的路徑
你還要使用下載到的 CLDC中帶有的特定軟件來處理生成的
class文件
第二 運行文檔附帶的應用程序示例 你從Sun網站上下載的文件中包含了許多示例應用程序的源程序以及編譯好的版本
你可以在你的台式機上
使用 KVM來運行這些示例應用程序
運行這些應用程序可以使你對一個 CLDC應用程序有一個感性認識
在運行這些程序之前
你必要啟動一個命令行界面
然後輸入下列命令
set cldc_classpath = c:;
set bin = %bin%;c:
cd
好
現在你已經設置了環境變量並進入了保存示例應用程序的目錄
你就可以開始運行它們了
比如說
為了運行 UITest程序
輸入
kvm
classpath %cldc_classpath% UITest
你也可以看看 Pong這個游戲程序
請在命令行輸入下面的命令
kvm
classpath %cldc_classpath% Pong
是不是挺好玩
你可以試一試運行每個示例應用程序
稍後
我們還要使用相同的方法來運行我們在台式機中開發的應用程序
第三節 構建一個 Palm應用程序
好
現在你對 J
ME的程序有一點感性認識了吧?現在讓我們做一些實事吧
我將介紹如何構建一個 運行於 Palm OS設備上的 Java應用程序
首先
雖然J
ME是Java技術
但這並非意謂著你可以使用現有的 Java應用程序
重新編譯它們然後把它們運行於新的設備上
在前面幾章中我已經談過
J
SE和J
EE使用的Java虛擬機中的許多關鍵特性已經從J
ME虛擬機中刪除了
因為設備的資源有限
J
ME帶的 Java虛擬機(KVM)缺乏浮點數支持;J
ME應用程序與 J
SE
J
EE應用程序的另外一個重要的差別是缺乏優先型多任務
雖然它不是 Java規范中所述的必要條件
但是幾乎你的 J
SE
J
EE應用程序運行的所有機器都支持優先型多任務
這意味著 CPU在多個 Java線程之間共享而不必在你的程序中添加任何特殊的代碼
而 J
ME使用的設備則往往沒有這種功能
為了確保多線程能夠工作
你必須調用 Thread
yield()方法
使用 CLDC簡表的另一個值得注意的方面是J
ME類庫缺少許多 J
SE類庫中的類
在構建應用程序時
必須使用這有限制的類庫
當你下載到CLDC文件時
你可以仔細考察你獲得的文件
弄清楚哪一個類包含在CLDC規范中
你必須對付的最後一個問題是 CLDC類庫內部缺少訪問用戶界面元素
按鈕
菜單
圖形
不使用 Palm的用戶界面
就不大可能為 Palm OS設備開發應用程序
Sun已經解決了這個問題
使用一個單獨的類庫 com
sun
kjava來提供給你訪問基層 Palm用戶界面的權限
下面這個示例程序就使用類庫創建窗口
按鈕和對話框
不過請注意
kjava類庫既不是 MIDP配置也不是 CLDC簡表的官方部分
它很有可能在未來的版本中改變或消失
這就意味著你使用 kjava類庫寫的任何程序
一旦發行新的J
ME版本你就不得不修改這個程序以適應新的J
ME版本
但是現在
它還是你開發使用Palm用戶界面的應用程序的唯一選擇
import lang
*;
import com
sun
kjava
*;
public class HelloWorld extends Spotlet
implements DialogOwner {
private Button quitButton;
private Button aboutButton;
private TextBox welcomeTextBox;
private final String welcomeString =
Hello World
;
private final String aboutTitleString =
About Hello World
;
private final String aboutString =
HelloWorld J
ME CLDC Application
;
public HelloWorld() {
register(WANT_SYSTEM_KEYS);
welcomeTextBox = new TextBox(welcomeString
);
aboutButton = new Button(
About
);
aboutButton
setEnabled(true);
quitButton = new Button(
Quit
);
quitButton
setEnabled(true);
paint();
}
public void dialogDismissed(String title) {
Graphics
clearScreen();
register(WANT_SYSTEM_KEYS);
paint();
}
public void paint() {
welcomeTextBox
paint();
aboutButton
paint();
quitButton
paint();
}
public void penDown(int x
int y) {
if (aboutButton
pressed(x
y)) {
Dialog aboutDialog =
new Dialog(this
aboutTitleString
aboutString
OK
);
aboutDialog
showDialog();
}
if (quitButton
pressed(x
y))
System
exit(
);
}
public static void main(String args[]) {
new HelloWorld();
}
}
分析HelloWorld應用程序 上面的這個HelloWorld應用程序具有運行 Palm OS的設備上的 CLDC應用程序的基本特征
當你仔細考察一下這段代碼
你會發現許多使用 kjava類庫編譯應用程序的特性
首先
這個程序擴展了 com
sun
kjava
spotlet類
使用 kjava
一個 spotlet就是任何可以得到焦點(focus)的類
那就是說
從系統中接收事件
比如手寫筆的點觸
在我們的例子中
當手寫筆點擊About和Quit按鈕時
HelloWorld應用程序需要響應
因此它需要獲得焦點
你的應用程序可以包括任意多的從 spotlet中衍生的類
雖然在任何時間它們中間只有一個能夠取得焦點
實際上
應用程序通過調用 register方法使用焦點
我們在 HelloWorld構造程序開始的部分和 dialogDismissed方法中都用了 register
HelloWorld類實現了 DialogOwner接口
實現 DailogOwner接口的類是用於創建對話框的類
我們的應用程序創建了一個對話框來響應手寫筆點擊 About按鈕的事件
為了實現DialogOwner接口
你的類必須包含一個dialogDismissed成員方法
為了實現 DialogOwner接口
你的類必須包含一個 dialogDismissed成員方法
這個方法在一個對話框被關閉的時間被調用
HelloWorld構造程序在屏幕上創建三個界面元素
一個文本框和兩個按鈕
你馬上就會發現 kjava和 J
SE AWT的一個重要的差別
kjava沒有與 AWT自動布局機制等價的東西
你必須自己編碼確定每個界面元素在屏幕上的位置
在我們的程序中
我們把文本框放在(
)和(
)之間
兩個按鈕放置在(
)和(
)
每當用戶在裝置上輕點手寫筆時
都要調用HelloWorld的 penDown方法
我們通過調用每個按鈕的 pressed方法確定這次點擊是否發生在按鈕的邊界以內
如果按鈕的pressed方法返回一個真值
意味著手寫筆點擊事件發生在按鈕邊界之內
這個按鈕相對應的動作將發生
比如說如果點擊了 About按鈕
我們通過創建一個新的 Dialog對象創建 About對話框
要是點擊了 Quit按鈕
我們就終止這個程序
最後
當用戶關閉對話框時
要調用 HelloWorld的 dialogDismissed方法
在我們的應用程序中
這個方法做的事情就是通過調用 register方法恢復焦點並調用 paint方法來刷新屏幕
編譯 編譯一個 CLDC應用程序需要兩步操作
首先你必須通過標准的 J
SE編譯程序運行它們
不過使用 CLDC類庫代替標准的 J
SE類庫
然後
使用preverify程序把得到的
class文件轉化成 KVM可讀的 Java應用程序
上面的示例程序如下面這樣編譯
javac
g:none
classpath %cldc_classpath%
d %temp% HelloWorld
java
preverify
classpath %cldc_classpath%
s %temp%
d
一旦編譯好後
就可以使用下面的命令來在你的台式機上運行這個程序
kvm
classpath %cldc_classpath% HelloWorld
既然這個CLDC應用程序在計算機上可以運行
那麼你也可以試著把它轉換成Palm可執行文件
在Palm上運行 為了把一個使用CLDC開發的
class文件轉換成在Palm OS設備上可實際運行的文件
你需要使用j
me_cldc
_
src
palm_overlay
zip中的許多程序
首先
你必須把你的
class文件轉換成 Palm OS應用程序
所有的 Palm OS應用程序都有擴展名
prc
通過使用
palm
database
MakePalmApp類把
class文件轉化成
prc文件
使用下面這個命令行運行我們剛才寫好的 HelloWorld
class文件
java palm
database
MakePalmApp
bootclasspath %cldc_classpath% HelloWorld
From:http://tw.wingwit.com/Article/program/Java/hx/201311/25772.html