

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、J2ME入門:建立一個(gè)MIDIets原著:Jonathan Knudsen and Sing Li編譯:Rochy ( Matrix )移動(dòng)信息設(shè)備簡(jiǎn)表MIDP ( Mobile In formation Device Profile)應(yīng)用程序,即MIDlets,它的命名延續(xù)了 applets 和 servlets的風(fēng)格。對(duì)于一個(gè)有經(jīng)驗(yàn)的java 程序員來說寫 MIDIets 程序相對(duì)容易的多。畢竟編程語(yǔ)言仍是java,而且,MIDP 中很多來自 java.lang和 java.io 的基本 API 和 J2SE 中的一樣,學(xué)習(xí)新的 API (主要來自javax.microediti on 的
2、)也不是很難。然而實(shí)際運(yùn)行起來,比起 J2SE 來,MIDlets 顯得稍微復(fù)雜一點(diǎn)。除了基本編譯環(huán)境,MIDlets 還需要一些額外的開發(fā)包。完整的編譯過程包含:編輯,源碼,編譯,類包, 測(cè)試。為了說明 MIDIets 的開發(fā)過程,這篇文章將建立和運(yùn)行一個(gè)簡(jiǎn)單的MIDlet,讀完這篇文章你應(yīng)該對(duì) MIDlet 開發(fā)有個(gè)全局上的了解。工具準(zhǔn)備MIDlets 可以在一般的桌面系統(tǒng)上開發(fā),盡管它本身是專門位小設(shè)備設(shè)計(jì)的。首先 你需要從Sun 或者其他廠商那里獲得一些工具。記住MIDP 只是一種規(guī)范,所有廠商都可以自由開發(fā)自己的補(bǔ)充工具。現(xiàn)在有很多MIDlet 的開發(fā)工具并且一般都是免費(fèi)的。最主要的
3、工具應(yīng)當(dāng)是sun 的 MIDP 標(biāo)準(zhǔn)實(shí)現(xiàn),它包含一個(gè)預(yù)審工具,個(gè) MIDP 設(shè)備模擬器,部分源碼和說明文檔。可以從sun 的官方下載。但通常我們都不用這些標(biāo)準(zhǔn)實(shí)現(xiàn)除非你對(duì) MIDIets 編譯和打包特別感興趣。(當(dāng)然如果你想要把 MIDP 運(yùn)行時(shí)環(huán)境移植到 一個(gè)新的設(shè)備或者平臺(tái)就去深入鉆研吧。)對(duì)于初學(xué)者另外一個(gè)較好用的工具是J2ME 的無線工具包 WTK ( WirelessToolKit )。WTK 中的 GUI 接口隱藏了多數(shù)的MIDIets 實(shí)現(xiàn)和打包細(xì)節(jié),提供了從源碼到實(shí)現(xiàn)MIDlets 的簡(jiǎn)單方法。而且 WTK 占用資源很小,可以說是一個(gè)微型的 IDE,幾乎不會(huì)影 響到你的機(jī)器性能
4、。其他還有很多來自設(shè)備制造商,無線運(yùn)營(yíng)商,IDE 開發(fā)商和一些開源組織的大一點(diǎn)的 IDE 工具,典型的幾個(gè)列在下面(包含可用鏈接):*Borla nd JBuilder X Mobile Editi on*IBM WebSphere Studio Device Developer*Research In Moti on BlackBerry Java Developme nt Environment*Sun Java Studio Mobility*NetBea ns IDE 4.x*Eclipse J2ME plug-i n*Nokia Developers Suite for J2ME實(shí)際
5、上你可以用任何你認(rèn)為合適的開發(fā)工具,不過我們這里建議使用WTK ,我們一下的內(nèi)容將以 WTK2.2 進(jìn)行講解。畢竟其他的IDE 都是用 WTK 作為 Plug-in 的,這樣一來你的開發(fā)經(jīng)驗(yàn)并不取決于你用的什么工具。在這篇文章里我們將詳細(xì)介紹開發(fā)環(huán) 境,開發(fā)工具以及模擬器的詳細(xì)細(xì)節(jié)。調(diào)試你的 MIDlets上文中提到的任何一款 IDE 都集成了完整的調(diào)試工具。 如果單獨(dú)使用 WTK 外加一 個(gè)文本編輯器,你可以使用 System.out.println ()方法將調(diào)試結(jié)果在控制臺(tái)中輸出, WTK 中的控制臺(tái)可以顯示給你所有的調(diào)試信息。編寫代碼我們?nèi)匀幌笤谄渌h(huán)境一樣編寫代碼:用你最喜愛的文本編
6、輯器編寫擴(kuò)展名為 .java 的文件。后面我們會(huì)給出一個(gè)可以加深你對(duì)黑客詞典理解的的 MIDlet 程序?qū)?例Jargoneer ,主要是在 Jargon 文件中查找特定的單詞。當(dāng)你在 Jargoneer 中輸入 一個(gè)詞,它會(huì)連接到服務(wù)器去查找定義。這個(gè) MIDlet 會(huì)讓你公司里的黑客朋友覺得你 很“ cool ”哦,呵呵。當(dāng)有人使用一些例如“ cruft ”或者“ grok ”等不常見的詞語(yǔ)時(shí), 你就可以通過在你的手機(jī)里面輸入它并且在很短的時(shí)間里找到它的解釋。下面就是 Jargoneer 的完整代碼(你可以到 Apress 網(wǎng)站下載這個(gè)程序) 。源碼如下:import java.io.*;
7、import javax.microedition.io.*;import javax.microedition.midlet.*;import javax.microedition.lcdui.*;public class Jargoneer extends MIDletimplements CommandListener, Runnable private Display mDisplay;private Command mExitCommand, mFindCommand, mCancelCommand;private TextBox mSubmitBox;private Form mP
8、rogressForm;private StringItem mProgressString;public Jargoneer() mExitCommand = new Command(Exit, Command.EXIT, 0); mFindCommand =new Command(Find, Command.SCREEN, 0); mCancelCommand = newCommand(Cancel, Command.CANCEL, 0);mSubmitBox = new TextBox(Jargoneer, , 32, 0);mSubmitBox.addCommand(mExitComm
9、and);mSubmitBox.addCommand(mFindCommand);mSubmitBox.setCommandListener(this);mProgressForm = new Form(Lookup progress);mProgressString = new StringItem(null, null);mProgressForm.append(mProgressString);public void startApp() mDisplay = Display.getDisplay(this);mDisplay.setCurrent(mSubmitBox);public
10、void pauseApp() public void destroyApp(boolean unconditional) public void commandAction(Command c, Displayable s) if (c = mExitCommand) destroyApp(false);notifyDestroyed();else if (c = mFindCommand) / Show the progress form. mDisplay.setCurrent(mProgressForm);/ Kick off the thread to do the query.Th
11、read t = new Thread(this);t.start();public void run() String word = mSubmitBox.getString();String definition;try definition = lookUp(word); catch (IOException ioe) Alert report = new Alert(Sorry,Something went wrong and that +definition could not be retrieved., null, null);report.setTimeout(Alert.FO
12、REVER); mDisplay.setCurrent(report, mSubmitBox);return;Alert results = new Alert(Definition, definition, null, null);results.setTimeout(Alert.FOREVER); mDisplay.setCurrent(results, mSubmitBox);private String lookUp(String word) throws IOException HttpConnection hc = null;InputStream in = null;String
13、 definition = null;try String baseURL = 48:8080/wj2/jargoneer?word=;String url = baseURL + word; mProgressString.setText(Connecting.); hc =(HttpConnection)Connector.open(url); hc.setRequestProperty(Connection,close); in = hc.openInputStream();mProgressString.setText(Reading.); int
14、contentLength = (int)hc.getLength();if (contentLength = -1) contentLength = 255; byte raw = newbytecontentLength;int length = in.read(raw);/ Clean up.in.close();hc.close();definition = new String(raw, 0, length);finally try if (in != null) in.close();if (hc != null) hc.close();catch (IOException ign
15、ored) return definition;編譯 MIDlet寫 MIDIets 應(yīng)用程序是一種交叉編譯,意味著你要在一個(gè)平臺(tái)編譯而在另外一個(gè)平 臺(tái)運(yùn)行。具體說就是要在我們自己的電腦平臺(tái)上使用J2SE 編譯 MIDIets,編譯好的MIDIet 可以運(yùn)行于移動(dòng)電話,尋呼機(jī),或者其他支持MIDP 的移動(dòng)信息設(shè)備。只要你將源程序放在正確的目錄下,WTK 可以完成所以的細(xì)節(jié)工作。1 啟動(dòng) Ktoolbar2 從工具欄選擇新建工程命令建立一個(gè)新項(xiàng)目。3 看到 WTK 提示,輸入 Jargoneer 作為工程名 MIDIet 類名。4 點(diǎn)擊建立工程按鈕,然后“ 0K”來略過工程設(shè)定窗口。圖示如下:R
16、* fdt.mat x 劃f t*t ut:氛盅圖1新建工程對(duì)話框WTK 將工程保存在默認(rèn)目錄apps 下。一下是目錄說明:vJ2ME Wireless Toolkit directoryappsJarg on eerbinlibressrc將上文源碼命名 Jargoneer .java 保存到 src 目錄下,你可以簡(jiǎn)單的單擊工具欄上 的 Build 按鈕編譯已經(jīng)打開的 MIDIet 工程。接著,WTK 使用 J2SE 的編譯器進(jìn)行編譯。一般說來,如果你編譯 J2SE 程序, classpath 環(huán)境變量會(huì)指向所有你程序需要聯(lián)系的 類。當(dāng)你使用 javac 命令進(jìn)行編譯文件的時(shí)候,一些例如
17、java.lang 的 API 就會(huì)被導(dǎo) 入,意即是說在你的 MIDlet中使用了類 java.lang.System 那么怎樣才能讓編譯器知 道你要使用的是這個(gè)類的 MIDP 版本而不是 J2SE 版本呢?其實(shí)我們有一個(gè)命令行選項(xiàng) -bootclasspath ,它允許你指出描述你將要使用的基礎(chǔ) API 的 classpath 。這個(gè)選項(xiàng) 這個(gè)時(shí)候就用來改變 MIDP 安裝默認(rèn)的 classes 目錄。例如如下的命令所示:javac bootclasspathmidpclasses Jargoneer.java如果你的 MIDP 安裝在不同的路徑你需要把它調(diào)整到classes 路徑下。預(yù)審類
18、文件下一個(gè)全新的編譯步驟就是預(yù)審了。由于小設(shè)備的存儲(chǔ)限制, MIDP (確切的說 CLDC ,即Connected Limited Device Configuration, 受限設(shè)備配置簡(jiǎn)表)詳細(xì)說 明了比特碼確定被分成兩個(gè)部分, preverify 將在設(shè)備以外的那部分起作用。而設(shè)備本 身僅僅用來在加載 class 以前做一些輕松的二次驗(yàn)證工作。如果使用 WTK ,你完全不 用擔(dān)心預(yù)審,你 click Build 的時(shí)候它會(huì)幫你自動(dòng)完成,你甚至都無法意識(shí)到。如果你 想要了解更多關(guān)于預(yù)審器的東西,就繼續(xù)看下去,否則可以直接跳過這一節(jié)就 ok 。比 特碼驗(yàn)證在 java 運(yùn)行時(shí)安全模型中是很基
19、礎(chǔ)的步驟。 在一個(gè) class 被動(dòng)態(tài)的加載之前, 比特碼驗(yàn) 證器 會(huì)檢查 類文 件以確 定它 工作正 常并 且不會(huì) 對(duì) JVM ( java VirtualMachine )造成危害。但是同時(shí)完成比特碼驗(yàn)證任務(wù)的代碼又太大了,無法在類似移動(dòng) 電話的小設(shè)備上面運(yùn)行。 CLDC 執(zhí)行了下面的兩步驗(yàn)證:1 設(shè)備以外的部分,類文件被預(yù)審。執(zhí)行指定的檢查步驟并且把類文件轉(zhuǎn)化成下一 步驗(yàn)證器可以輕松操作的格式,同時(shí)預(yù)審器在里面加了一些額外的數(shù)據(jù)。2 設(shè)備上,類加載的時(shí)候執(zhí)行第二步驗(yàn)證。如果類文件沒有被預(yù)審,這一步拒絕執(zhí) 行。MIDP參考實(shí)現(xiàn)和 WTK 包含了一個(gè)叫做預(yù)審器的工具在上面的第一步里面起 作用
20、。預(yù)審器以類文件作為輸入,輸出一個(gè)審查類文件。在使用預(yù)審器之前,你需要設(shè)置 classpath 到相應(yīng)路徑下,就好像設(shè)置其他類路徑那樣。最后, 可以利用參數(shù) -d 更改輸 出路徑。如果使用預(yù)審器覆蓋一個(gè)已經(jīng)存在的類文件,你可以使用一下所示的命令:preverify-classpath.;midpclassesd. Jarg on eer這個(gè)示例中, -d 告訴預(yù)審器將預(yù)審類文件寫到正確的目錄下。同時(shí)別忘了要將內(nèi)類( inner class )一同預(yù)審。Note :象這樣把別特碼驗(yàn)證分開為兩分存在嚴(yán)重的安全漏洞。設(shè)備應(yīng)該通過安全的方 式只從可信的來源下載代碼,因?yàn)橐徊糠直忍卮a是在設(shè)備以外檢查的。
21、攻擊者可能提供 看起來已經(jīng)通過驗(yàn)證的惡意代碼,即使它是無法通過 J2SE 驗(yàn)證器的。而對(duì)于 MIDP 第二步驗(yàn)證來說,它看起來可能是完全正確的并且會(huì)被加載和執(zhí)行。Sun s J2ME WTK 模擬器WTK 包含了許多不同類型的模擬器,你可以選擇任何一個(gè)測(cè)試你的程序。當(dāng) Run 按鈕被 click的時(shí)候,默認(rèn)的模擬器被加載。WTK 設(shè)備WTK2.2 含有一下四個(gè)主要設(shè)備模擬器:1 DefaultColorPhone, 240*320 彩屏,下圖 2 示意。2DefaultGrayPhone3MediaControlSkin 效果的標(biāo)簽等。4QwertyDevice ,是個(gè) smartphone
22、,636*235 彩屏, 一個(gè)小型 QWERTY 鍵盤。運(yùn)行 MIDletssun 的 MIDP 參考實(shí)現(xiàn)包含一個(gè)名為 midp 的模擬器。它模擬一個(gè)圖形 MID , 一個(gè)移動(dòng)電話,一些標(biāo)準(zhǔn)按鍵和一個(gè) 182*210 的屏幕。 WTK 包含了類似的模擬器, 其他第三方模擬器也都差不多。一旦得到預(yù)審類文件,你就可以在模擬器上面運(yùn)行了。 雖然表現(xiàn) MIDP 設(shè)備的效果,但是我們必須知道模擬器應(yīng)用是在 J2SE 環(huán)境下運(yùn)行的。 它在你電腦屏幕上面的模擬器上自運(yùn)行,比如你的PATH 設(shè)置如下: .midpbin. 那么就可以使用命令 midp Jargoneer 運(yùn)行應(yīng)用程序了。如果使用 WTK ,你
23、只要選擇一個(gè) 模擬器然后clickrun 按鈕就 ok 了。假設(shè)一切運(yùn)行正常,你會(huì)看到類似下一節(jié) figure 2 示意的那種效果,那么恭喜你,你已經(jīng)成功完成了你的第一個(gè) MIDlet 應(yīng)用。使用模擬器控制圖是一個(gè)模擬器的示意圖, 108*208 黑白屏幕。,類似于默認(rèn)手機(jī)模擬器,108*208caise 屏幕,帶有音樂Sun 的 WTK 帶有的模擬器可以模擬很多真實(shí)設(shè)備的功能:1一個(gè)小規(guī)格屏幕,一定的輸入容量。2兩個(gè)可用的軟鍵,沒有固定的功能。一般說來,它們各自的功能被顯示在屏幕靠近它 們的地方。在 MIDIets 種,軟鍵用來操作命令。3方向鍵提供用戶滾動(dòng)瀏覽和選擇多項(xiàng)的功能。4一個(gè) se
24、lect 鍵允許用戶確認(rèn)選擇的項(xiàng)目。Soft VvtUpKwiptlM (Arrw)Itattcutelect (OQBtftWiFigure 2 WTK emulator摘要本文引導(dǎo)讀者做了一次 MIDP 開發(fā)的觀光。對(duì)于編碼,還是和在 J2SE 環(huán)境下一樣,但 是編譯的過程截然不同。首先,源碼必須使用javac 的-bootclasspath命令編譯為MIDP 識(shí)別的文件。其次,類文件必須經(jīng)過命令行工具預(yù)審器的預(yù)審。(在 WTK 中,這個(gè)步驟是被自動(dòng)執(zhí)行的,用戶只要點(diǎn)擊 build 按鈕就好)。而且,在 WTK 中,應(yīng)用程序 可以很輕松的在模擬器上測(cè)試。資源 This article is
25、 an excerpt from Chapter 2, Buildi ng MIDIets, from the book Beginning J2ME,Jon atha n Knu dse n and Sing Li(Apress, April 2005; ISBN: 1590594797):http:/ You can dow nl oad this articles accompa nying source code from Apress:http:/ nload.html?APRESSESSID=f887f2ef01605e5c12b5f1135e6a37c8*You can dow nl oad the MIDP refere nee impleme ntatio n by following the linksfrom:http:/java.s un .com/products/midp/ Suns J2ME Wireless Toolkit:http:/java.s un .com/products/j2mewtoolkit/ Borla nd JBuilder X Mobile Editi on:http:/ ndex.html*
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 注會(huì)風(fēng)險(xiǎn)管理實(shí)踐試題及答案
- 2025年證券從業(yè)資格證考試中案例分析能力的提升試題及答案
- 試題及答案:疫情中的微生物檢測(cè)
- 八年級(jí)道德與法治下冊(cè) 第三單元 人民當(dāng)家作主 第六課 我國(guó)國(guó)家機(jī)構(gòu)第3框 國(guó)家行政機(jī)關(guān)教學(xué)設(shè)計(jì) 新人教版
- 經(jīng)典理論于2025年特許金融分析師考試試題及答案
- 制定符合注冊(cè)會(huì)計(jì)師考試需求的個(gè)人職業(yè)發(fā)展規(guī)劃策略試題及答案
- 2025年銀行資格證考試各科知識(shí)回顧試題及答案
- 項(xiàng)目建設(shè)中的法規(guī)與標(biāo)準(zhǔn)試題及答案
- 研究項(xiàng)目管理考試中必考內(nèi)容試題及答案
- 深度剖析證券從業(yè)資格證考試試題及答案
- GB/T 9754-2007色漆和清漆不含金屬顏料的色漆漆膜的20°、60°和85°鏡面光澤的測(cè)定
- GB/T 18214.1-2000全球?qū)Ш叫l(wèi)星系統(tǒng)(GNSS)第1部分:全球定位系統(tǒng)(GPS)接收設(shè)備性能標(biāo)準(zhǔn)、測(cè)試方法和要求的測(cè)試結(jié)果
- 行政事業(yè)單位內(nèi)控手冊(cè)
- 邀請(qǐng)函模板完整
- 老年護(hù)理學(xué)(學(xué)習(xí)通)考試題庫(kù)(含答案)
- 部編版三年級(jí)語(yǔ)文下冊(cè)第五單元習(xí)作例文、習(xí)作課件
- 邁瑞公司中文簡(jiǎn)介
- DB11-T 527-2021配電室安全管理規(guī)范
- 攪拌車說明書
- XX大學(xué)學(xué)生中文成績(jī)單(人力資源管理專業(yè))
- 電動(dòng)叉車控制器電路圖大全
評(píng)論
0/150
提交評(píng)論