使用Java編寫Palm OS程序的解決方案1_JSP教程
使用Java語(yǔ)言為 Palm OS編寫程序的領(lǐng)域還沒(méi)有完全統(tǒng)一,并且也有許多程度上的差異,目前,市面上有好幾種不同的可用的應(yīng)用程序接口,每種應(yīng)用程序接口都給出了一個(gè)到當(dāng)前的Palm OS應(yīng)用程序不同程度的訪問(wèn)權(quán)限。 也許這其中大家最熟悉的是Sun微系統(tǒng)出品的產(chǎn)品;但是能夠?yàn)镻alm OS寫程序的絕不只有這一種產(chǎn)品。
一、Sun的解決方案: KVM、 Configuration和 Profile
KVM是 Kilobyte Virtual Machine (千字節(jié)虛擬機(jī)),那么命名是因?yàn)樗膬?nèi)存大小是以千字節(jié)來(lái)量度,而不是像 Java虛擬機(jī)那樣需要兆字節(jié)。 因?yàn)橛羞@么苛刻的內(nèi)存要求, KVM的功能只是完整 JVM的的子集。 你可以從 Javasoft站點(diǎn)上找到全部的信息,但是值得注意的是它遺漏了映射(reflection)、 JNI和自定義類裝載器以及一個(gè)可變的安全機(jī)制。
Sun已經(jīng)制訂一個(gè)計(jì)劃,提供了 configuration和 profile來(lái)滿足設(shè)備程序設(shè)計(jì)的需要。 configuration是一個(gè)應(yīng)用程序接口,是設(shè)計(jì)來(lái)提供一個(gè)基礎(chǔ),用于一類廣泛的一般的設(shè)備,所有的這些設(shè)備都有相似的特性,比如說(shuō)有限的內(nèi)存,偶然性強(qiáng)的網(wǎng)絡(luò)連接性,低電力消耗,可運(yùn)行在電池上,所以,J2Me被設(shè)計(jì)得既一般又抽象。 現(xiàn)在 Java 2 Micro Edition(J2ME)可用的 configuration有 CLDC(Connected,Limited Device Configuration)和 CDC(Connected Device Configuration)兩種,后者用于比 Palm功能更強(qiáng)大的設(shè)備,這就超出了我們討論的范圍;而前者,代表有限連接設(shè)備配置,是像PDA,雙通道呼叫器以及移動(dòng)電話。 CLDC包括一個(gè)J2SE中的類的子集,但是有一些重要的差別,例如,因?yàn)樾⌒驮O(shè)備中的虛擬機(jī)使用的無(wú)用單元收集機(jī)制,CLDC的 java.lang.Object不包含 finalize方法,你應(yīng)當(dāng)記住,這個(gè)應(yīng)用程序接口中的某個(gè)特定的類可能出現(xiàn)但是它的某個(gè)方法卻沒(méi)有出現(xiàn)。請(qǐng)參考應(yīng)用程序接口文檔,這樣的話你就會(huì)知道什么時(shí)候該用什么configuration了。
對(duì)于許多剛開始使用 CLDC開發(fā)程序的朋友,感到奇怪的是 CLDC不支持浮點(diǎn)數(shù)。 這是 KVM默認(rèn)的實(shí)現(xiàn), KVM是使用 C編寫的,它可以被移植到許多平臺(tái)上,它不支持浮點(diǎn)運(yùn)算,這是因?yàn)槲覀兯鎸?duì)的硬件一般是小型設(shè)備,有的還是使用8位的處理器,這些處理器有可能不支持浮點(diǎn)運(yùn)算。
profile是特殊的具體的,它的目標(biāo)是一個(gè)比configuration更具體的設(shè)備的類,包括用戶界面和事件處理元素,這在 configuration中是沒(méi)有出現(xiàn)。 現(xiàn)在, Palm OS或 PDA沒(méi)有公開可用的 profile。
Java Community Process有一個(gè)已經(jīng)開發(fā)了一段時(shí)間的 PDA Profile, 開發(fā)者們?nèi)匀辉诘却粋(gè)新的 PDA profile版本。與此同時(shí),想要遵循 KVM/Sun解決方案開發(fā)者的應(yīng)當(dāng)做什么呢? CLDC版本包括一個(gè)可以用作 Palm OS的 最原始的profile的類的最小的集合, 據(jù)悉, Sun不贊同使用這些類開發(fā)任何商業(yè)程序,他們也不計(jì)劃對(duì)這個(gè)應(yīng)用程序接口做任何更新。 但是如果沒(méi)有 PDA profile,開發(fā)者也可以使用這些類庫(kù)。 通常我們所知的是Kjava,它包含了許多 GUI類: CheckBox、 RadioButton、 List等等。除了這些,還有 Spotlet類,它被用于處理事件以及 Palm OS捕獲手寫筆的輸入和鍵盤按下的事件等等。
下面是一個(gè)使用 kjava來(lái)顯示簡(jiǎn)單的文本字符串和按鈕的類:
| import com.sun.kjava.*; public class HelloKjava extends Spotlet { private static Button OKButton; public static Graphics g = Graphics.getGraphics(); file://取得Graphics對(duì)象 public static void main(String args[]) { HelloKjava hk = new HelloKjava(); } public HelloKjava() file://HelloKjava類的構(gòu)造方法 { OKButton = new Button("OK", 84, 140); register(NO_EVENT_OPTIONS); drawScreen(); } public void penDown(int x, int y) { if (OKButton.pressed(x,y)) { System.exit(1); } } public void drawScreen() { g.clearScreen(); file://清除屏幕 g.drawString("Hello KJava",20, 10); file://把字符串畫在屏幕上 OKButton.paint(); } } |
還有一個(gè)類 com.sun.kjava.Database,它在一種到達(dá) Palm數(shù)據(jù)庫(kù)應(yīng)用程序接口的方法。 這就是說(shuō),它是非常原始的并且不提供訪問(wèn)存在Palm數(shù)據(jù)庫(kù)中的任何內(nèi)容完全的權(quán)限。它只允許設(shè)置和獲得字節(jié)數(shù)組; 它不允許鍵入訪問(wèn),除了通過(guò)記錄標(biāo)識(shí)號(hào) (是一個(gè)整數(shù) )。 因?yàn)閿?shù)據(jù)庫(kù)只能理解字節(jié)數(shù)組,給你的數(shù)據(jù)意味著你需要把這些字節(jié)數(shù)組解析成有含義的字段。
Kawt也是 KVM的一個(gè) Abstract Window Toolkit(抽象窗口工具包),Kaw為Java程序員提供了一個(gè)更加常見(jiàn)的應(yīng)用程序接口集合,例如,它使用通用布局管理器 (除了 GridBag)來(lái)在屏幕上放置組件,此外它還允許你設(shè)置那些組件的監(jiān)聽者,換言之,Kawt中沒(méi)有包括 Spotlet機(jī)制。按鈕、面板、標(biāo)簽以及文本框和其他的 AWT類都可用,而且,還可以有自定義類: FtpShel,TabbedPane和 GifLoader,還有一個(gè)類 java.io.File,它是一個(gè)使用標(biāo)準(zhǔn)的 Palm數(shù)據(jù)庫(kù)文件儲(chǔ)存資料的目錄或文件結(jié)構(gòu)的抽象類。
使用 Kawt,我們編寫出來(lái)的程序如下所示:
| import java.awt.*; import java.awt.event.*; public class HelloKawt extends Frame implements ActionListener { Button OKBtn = new Button("OK"); Label lbl = new Label("Hello Palm"); public static void main(String args[]) { new HelloKawt(); } public HelloKawt() { OKBtn.addActionListener(this); this.add("South", OKBtn); this.add("Center", lbl); pack(); this.show(); } public void actionPerformed(ActionEvent ae) { System.exit(1); } } |
雖然 Kawt提供了一個(gè)比 kjava更好的類的集合,但是它實(shí)際上是基于 kjava的,因此,它缺少數(shù)據(jù)庫(kù)類。對(duì)于開發(fā) Palm程序來(lái)說(shuō),這是一個(gè)相當(dāng)嚴(yán)重的問(wèn)題。 通常來(lái)說(shuō),任何商用應(yīng)用程序都需要把數(shù)據(jù)儲(chǔ)存在設(shè)備上,隨后還要與臺(tái)式機(jī)同步化, kjava.Database的同步化有點(diǎn)問(wèn)題,因?yàn)樗话?HotSync軟件期待的分類,它也不允許訪問(wèn)每個(gè)包含最初記錄的 "本地 " palm數(shù)據(jù)庫(kù)文件的屬性位,即使使用了 PDA Profile版本,這些也不可能解決,因?yàn)?profile的目標(biāo)是一般的 PDA而不是特別的 Palm OS。 然而, Kawt團(tuán)隊(duì)畢竟也做了一件出色的工作,它使剛開始寫Palm程序的程序員很容易使用Java編程。
三、IBM解決方案
IBM有自己的虛擬機(jī),叫J9---它在許多方面都優(yōu)于 KVM,Visual Age Micro Edition支持 J9,我們大家都知道, Visual Age Micro Edition是一個(gè)來(lái)自 Object Technology International的 IDE,而 Object Technology International又是 IBM擁有的子公司。 而 VAME是一個(gè)完整的開發(fā)工具,它可以給對(duì) Palm OS應(yīng)用程序接口完全的訪問(wèn)權(quán)限, 然而,這需要付出一些代價(jià)。 雖然 VAME是一種 Java工具,它所提供的東西都是使用Palm應(yīng)用程序接口的本地 C方法的包裝。 也就是說(shuō), VAME中調(diào)用的方法和你在 C中看到的方法完全相同。雖然理解你的應(yīng)用程序所要運(yùn)行的操作系統(tǒng)并不是一件壞事,但這需要你非常了解開發(fā) Palm的 C應(yīng)用程序接口的方法特征,如果你只是一名Java開發(fā)者這就成了問(wèn)題了。這個(gè)是一個(gè)缺點(diǎn),開發(fā)VAME的工程師似乎發(fā)覺(jué)到了這一點(diǎn),并嘗試著去改進(jìn)。
使用Java語(yǔ)言為 Palm OS編寫程序的領(lǐng)域還沒(méi)有完全統(tǒng)一,并且也有許多程度上的差異,目前,市面上有好幾種不同的可用的應(yīng)用程序接口,每種應(yīng)用程序接口都給出了一個(gè)到當(dāng)前的Palm OS應(yīng)用程序不同程度的訪問(wèn)權(quán)限。 也許這其中大家最熟悉的是Sun微系統(tǒng)出品的產(chǎn)品;但是能夠?yàn)镻alm OS寫程序的絕不只有這一種產(chǎn)品。
一、Sun的解決方案: KVM、 Configuration和 Profile
KVM是 Kilobyte Virtual Machine (千字節(jié)虛擬機(jī)),那么命名是因?yàn)樗膬?nèi)存大小是以千字節(jié)來(lái)量度,而不是像 Java虛擬機(jī)那樣需要兆字節(jié)。 因?yàn)橛羞@么苛刻的內(nèi)存要求, KVM的功能只是完整 JVM的的子集。 你可以從 Javasoft站點(diǎn)上找到全部的信息,但是值得注意的是它遺漏了映射(reflection)、 JNI和自定義類裝載器以及一個(gè)可變的安全機(jī)制。
Sun已經(jīng)制訂一個(gè)計(jì)劃,提供了 configuration和 profile來(lái)滿足設(shè)備程序設(shè)計(jì)的需要。 configuration是一個(gè)應(yīng)用程序接口,是設(shè)計(jì)來(lái)提供一個(gè)基礎(chǔ),用于一類廣泛的一般的設(shè)備,所有的這些設(shè)備都有相似的特性,比如說(shuō)有限的內(nèi)存,偶然性強(qiáng)的網(wǎng)絡(luò)連接性,低電力消耗,可運(yùn)行在電池上,所以,J2Me被設(shè)計(jì)得既一般又抽象。 現(xiàn)在 Java 2 Micro Edition(J2ME)可用的 configuration有 CLDC(Connected,Limited Device Configuration)和 CDC(Connected Device Configuration)兩種,后者用于比 Palm功能更強(qiáng)大的設(shè)備,這就超出了我們討論的范圍;而前者,代表有限連接設(shè)備配置,是像PDA,雙通道呼叫器以及移動(dòng)電話。 CLDC包括一個(gè)J2SE中的類的子集,但是有一些重要的差別,例如,因?yàn)樾⌒驮O(shè)備中的虛擬機(jī)使用的無(wú)用單元收集機(jī)制,CLDC的 java.lang.Object不包含 finalize方法,你應(yīng)當(dāng)記住,這個(gè)應(yīng)用程序接口中的某個(gè)特定的類可能出現(xiàn)但是它的某個(gè)方法卻沒(méi)有出現(xiàn)。請(qǐng)參考應(yīng)用程序接口文檔,這樣的話你就會(huì)知道什么時(shí)候該用什么configuration了。
對(duì)于許多剛開始使用 CLDC開發(fā)程序的朋友,感到奇怪的是 CLDC不支持浮點(diǎn)數(shù)。 這是 KVM默認(rèn)的實(shí)現(xiàn), KVM是使用 C編寫的,它可以被移植到許多平臺(tái)上,它不支持浮點(diǎn)運(yùn)算,這是因?yàn)槲覀兯鎸?duì)的硬件一般是小型設(shè)備,有的還是使用8位的處理器,這些處理器有可能不支持浮點(diǎn)運(yùn)算。
profile是特殊的具體的,它的目標(biāo)是一個(gè)比configuration更具體的設(shè)備的類,包括用戶界面和事件處理元素,這在 configuration中是沒(méi)有出現(xiàn)。 現(xiàn)在, Palm OS或 PDA沒(méi)有公開可用的 profile。
Java Community Process有一個(gè)已經(jīng)開發(fā)了一段時(shí)間的 PDA Profile, 開發(fā)者們?nèi)匀辉诘却粋(gè)新的 PDA profile版本。與此同時(shí),想要遵循 KVM/Sun解決方案開發(fā)者的應(yīng)當(dāng)做什么呢? CLDC版本包括一個(gè)可以用作 Palm OS的 最原始的profile的類的最小的集合, 據(jù)悉, Sun不贊同使用這些類開發(fā)任何商業(yè)程序,他們也不計(jì)劃對(duì)這個(gè)應(yīng)用程序接口做任何更新。 但是如果沒(méi)有 PDA profile,開發(fā)者也可以使用這些類庫(kù)。 通常我們所知的是Kjava,它包含了許多 GUI類: CheckBox、 RadioButton、 List等等。除了這些,還有 Spotlet類,它被用于處理事件以及 Palm OS捕獲手寫筆的輸入和鍵盤按下的事件等等。
下面是一個(gè)使用 kjava來(lái)顯示簡(jiǎn)單的文本字符串和按鈕的類:
| import com.sun.kjava.*; public class HelloKjava extends Spotlet { private static Button OKButton; public static Graphics g = Graphics.getGraphics(); file://取得Graphics對(duì)象 public static void main(String args[]) { HelloKjava hk = new HelloKjava(); } public HelloKjava() file://HelloKjava類的構(gòu)造方法 { OKButton = new Button("OK", 84, 140); register(NO_EVENT_OPTIONS); drawScreen(); } public void penDown(int x, int y) { if (OKButton.pressed(x,y)) { System.exit(1); } } public void drawScreen() { g.clearScreen(); file://清除屏幕 g.drawString("Hello KJava",20, 10); file://把字符串畫在屏幕上 OKButton.paint(); } } |
還有一個(gè)類 com.sun.kjava.Database,它在一種到達(dá) Palm數(shù)據(jù)庫(kù)應(yīng)用程序接口的方法。 這就是說(shuō),它是非常原始的并且不提供訪問(wèn)存在Palm數(shù)據(jù)庫(kù)中的任何內(nèi)容完全的權(quán)限。它只允許設(shè)置和獲得字節(jié)數(shù)組; 它不允許鍵入訪問(wèn),除了通過(guò)記錄標(biāo)識(shí)號(hào) (是一個(gè)整數(shù) )。 因?yàn)閿?shù)據(jù)庫(kù)只能理解字節(jié)數(shù)組,給你的數(shù)據(jù)意味著你需要把這些字節(jié)數(shù)組解析成有含義的字段。
Kawt也是 KVM的一個(gè) Abstract Window Toolkit(抽象窗口工具包),Kaw為Java程序員提供了一個(gè)更加常見(jiàn)的應(yīng)用程序接口集合,例如,它使用通用布局管理器 (除了 GridBag)來(lái)在屏幕上放置組件,此外它還允許你設(shè)置那些組件的監(jiān)聽者,換言之,Kawt中沒(méi)有包括 Spotlet機(jī)制。按鈕、面板、標(biāo)簽以及文本框和其他的 AWT類都可用,而且,還可以有自定義類: FtpShel,TabbedPane和 GifLoader,還有一個(gè)類 java.io.File,它是一個(gè)使用標(biāo)準(zhǔn)的 Palm數(shù)據(jù)庫(kù)文件儲(chǔ)存資料的目錄或文件結(jié)構(gòu)的抽象類。
使用 Kawt,我們編寫出來(lái)的程序如下所示:
| import java.awt.*; import java.awt.event.*; public class HelloKawt extends Frame implements ActionListener { Button OKBtn = new Button("OK"); Label lbl = new Label("Hello Palm"); public static void main(String args[]) { new HelloKawt(); } public HelloKawt() { OKBtn.addActionListener(this); this.add("South", OKBtn); this.add("Center", lbl); pack(); this.show(); } public void actionPerformed(ActionEvent ae) { System.exit(1); } } |
雖然 Kawt提供了一個(gè)比 kjava更好的類的集合,但是它實(shí)際上是基于 kjava的,因此,它缺少數(shù)據(jù)庫(kù)類。對(duì)于開發(fā) Palm程序來(lái)說(shuō),這是一個(gè)相當(dāng)嚴(yán)重的問(wèn)題。 通常來(lái)說(shuō),任何商用應(yīng)用程序都需要把數(shù)據(jù)儲(chǔ)存在設(shè)備上,隨后還要與臺(tái)式機(jī)同步化, kjava.Database的同步化有點(diǎn)問(wèn)題,因?yàn)樗话?HotSync軟件期待的分類,它也不允許訪問(wèn)每個(gè)包含最初記錄的 "本地 " palm數(shù)據(jù)庫(kù)文件的屬性位,即使使用了 PDA Profile版本,這些也不可能解決,因?yàn)?profile的目標(biāo)是一般的 PDA而不是特別的 Palm OS。 然而, Kawt團(tuán)隊(duì)畢竟也做了一件出色的工作,它使剛開始寫Palm程序的程序員很容易使用Java編程。
三、IBM解決方案
IBM有自己的虛擬機(jī),叫J9---它在許多方面都優(yōu)于 KVM,Visual Age Micro Edition支持 J9,我們大家都知道, Visual Age Micro Edition是一個(gè)來(lái)自 Object Technology International的 IDE,而 Object Technology International又是 IBM擁有的子公司。 而 VAME是一個(gè)完整的開發(fā)工具,它可以給對(duì) Palm OS應(yīng)用程序接口完全的訪問(wèn)權(quán)限, 然而,這需要付出一些代價(jià)。 雖然 VAME是一種 Java工具,它所提供的東西都是使用Palm應(yīng)用程序接口的本地 C方法的包裝。 也就是說(shuō), VAME中調(diào)用的方法和你在 C中看到的方法完全相同。雖然理解你的應(yīng)用程序所要運(yùn)行的操作系統(tǒng)并不是一件壞事,但這需要你非常了解開發(fā) Palm的 C應(yīng)用程序接口的方法特征,如果你只是一名Java開發(fā)者這就成了問(wèn)題了。這個(gè)是一個(gè)缺點(diǎn),開發(fā)VAME的工程師似乎發(fā)覺(jué)到了這一點(diǎn),并嘗試著去改進(jìn)。
- jsp response.sendRedirect不跳轉(zhuǎn)的原因分析及解決
- JSP指令元素(page指令/include指令/taglib指令)復(fù)習(xí)整理
- JSP腳本元素和注釋復(fù)習(xí)總結(jié)示例
- JSP FusionCharts Free顯示圖表 具體實(shí)現(xiàn)
- 網(wǎng)頁(yè)模板:關(guān)于jsp頁(yè)面使用jstl的異常分析
- JSP頁(yè)面中文傳遞參數(shù)使用escape編碼
- 基于jsp:included的使用與jsp:param亂碼的解決方法
- Java Web項(xiàng)目中連接Access數(shù)據(jù)庫(kù)的配置方法
- JDBC連接Access數(shù)據(jù)庫(kù)的幾種方式介紹
- 網(wǎng)站圖片路徑的問(wèn)題:絕對(duì)路徑/虛擬路徑
- (jsp/html)網(wǎng)頁(yè)上嵌入播放器(常用播放器代碼整理)
- jsp下顯示中文文件名及絕對(duì)路徑下的圖片解決方法
JSP教程Rss訂閱編程教程搜索
JSP教程推薦
- 在J2ME中使用Timer和TimerTask來(lái)實(shí)現(xiàn)多線程
- J2ME程序打包發(fā)布小技巧
- JAVA實(shí)現(xiàn)數(shù)據(jù)庫(kù)基本操作指南
- 如何解決JSP頁(yè)面顯示亂碼問(wèn)題
- 純JSP+DWR實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)下拉選擇菜單實(shí)現(xiàn)技巧
- 利用HSQLDB來(lái)進(jìn)行Hibernate的單元測(cè)試
- 基于JSP HttpServlet的詳細(xì)介紹
- jsp include引用非本級(jí)目錄網(wǎng)頁(yè)實(shí)現(xiàn)代碼
- JSP初級(jí)教程之跟我學(xué)JSP(六)
- JSP數(shù)據(jù)導(dǎo)出到EXCEL簡(jiǎn)便方法
- 相關(guān)鏈接:
- 教程說(shuō)明:
JSP教程-使用Java編寫Palm OS程序的解決方案1
。