




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、J2ME程序開發全方位基礎匯總一、J2ME中需要的Java基礎知識現在有大部分人,都是從零開始學j2me的,學習J2ME的時候,總是從Java基礎開始學習,而且現在講Java基礎的書籍中都是以J2SE來講基礎,這就給學習造成了一些不必要的麻煩,下面將J2ME中用到的和不需要的Java基礎知識做一個簡單的說明:J2ME中使用到的Java基礎知識:1、Java語法基礎:包括基本數據類型、關鍵字、運算符等等2、面向對象的思想:類和對象的概念,繼承和多態等等。3、異常處理4、多線程J2ME中沒有用到的Java基礎知識:1、jdk中javac和java命令的使用2、Java基礎中的很多類在J2ME中沒有
2、,或者類中的方法做了大量的精簡。所以建議在J2ME中熟悉類庫。3、Applet、AWT、Swing這些知識在J2ME中根本使用不到。簡單說這么多,希望學J2ME的朋友們能少走一些彎路,不足之處希望大家積極指正和補充。二、J2ME中暫時無法完成的功能列一些J2ME中暫時無法完成的功能,希望大家能積極補充:1、在手機中不更改代碼實現移植,主要指游戲。2、動態修改按鈕文字。3、在Canvas上接受中文輸入。4、操作本地資源、例如地址本、已收短信息等。5、制作破壞性的手機病毒。6、其他等待大家來補充。三、J2ME的跨平臺性J2ME技術源于Java,所以也具有JVM的優勢,可以在支持Java的平臺上進行
3、移植,但是現在的J2ME技術在跨平臺上卻做的很糟糕,我們來簡單看一下原因:1、手機的屏幕尺寸不一:這個主要在界面制作上。如果你使用的是高級用戶界面,比如你做的是應用開發或者用戶登陸、用戶注冊這樣的通用功能時,一般沒有什么問題。如果你使用的是低級用戶界面,比如你做的是游戲,那么你就需要考慮這個問題了。2、廠商的擴展API不統一:例如Nokia的擴展API類庫UI系列,在別的手機上或者沒有實現,或者包名不同等等。3、手機平臺上實現的bug:例如Nokia的7650在實現雙緩沖上有bug,那么在這種機型上運行的軟件就不能使用雙緩沖。其他NOKIA上的一些bug,可以參看:4、手機性能問題。不同手機的
4、可用內存、最大jar文件都有要求,例如Nokia S40的大部分手機支持的最大jar文件為64K,最大可用內容為210K。所以現在的手機軟件,特別是游戲都提供支持的機型列表,也才有了手機游戲移植人員的存在。四、學習J2ME可以從事的工作種類現在J2ME技術可以說相當的火暴,這里介紹一些學好了J2ME之后可以從事的工作的種類:1、J2ME游戲開發人員根據游戲策劃或者文檔要求,在某種特定的機型(以Nokia S40或S60居多)開發游戲程序。這是現在大部分J2ME程序員從事的工作。需要熟練掌握:高級用戶界面、低級用戶界面、線程,如果是網絡游戲,還需要熟練網絡編程。2、J2ME應用開發人員現在的移動
5、應用還不是很多,但是還是出現了一些,特別是移動定位以及移動商務相關的內容。需要熟練掌握:高級用戶界面、線程和網絡編程。3、J2ME游戲移植人員參照源代碼,將可以在一個平臺上可以運行的游戲移植到其他平臺上去。例如將Nokia S40的游戲移植到S60上,或者索愛的T618等等。主要是控制屏幕坐標,有些可能需要替換一些API。需要熟悉各平臺之間的差異以及相關的技術參數,比如屏幕大小、最大jar文件尺寸等等。五、J2ME程序設計的幾個原則1、使用面向對象編程。雖然使用面向過程編程可以減小文件的尺寸,但是為了以后維護的方便和利于擴展,還是要使用面向對象編程。2、使用MVC模式將模型、界面和控制分離。現
6、在很多的程序將三者合一,但是如果你做的程序比較大的話,還是建議你進行分離。3、自動存儲用戶設定使用RMS來存儲用戶的信息,例如存儲用戶上次輸入的用戶名、密碼、用戶對于系統的設定等,這樣不僅可以減少用戶的輸入,而且對用戶友好。很多程序甚至做了自動登陸等。4、一些系統設置允許用戶關閉。如背景音樂、背景燈顯示等。5、將低級用戶界面的繪制動作放在一個獨立的線程里面去。6、在需要大量時間才能完成的工作時,給用戶一個等待界面。六、從模擬器到真機測試對于J2ME開發者來說,模擬器給我們帶來了很多方便,比如可以在模擬器中調試程序以及很方便的察看程序的效果,但是模擬器也給我們帶來了一些問題,比如模擬器實現的bu
7、g等等,所以進行真機測試是必須的。1、為什么要進行真機測試?因為模擬器程序可能存在bug,以及真機的性能有限,所以必須進行真機測試。2、如何將程序傳輸到機器中?將程序傳輸到機器中有如下方式:a)OTA下載b)使用數據線傳輸c)紅外傳輸d)藍牙你可以根據條件,選擇合適的方式。3、 真機測試主要測什么?真機測試的內容很多,主要測試以下幾個方面:a)程序的功能b)程序的操作性,是否易操作c)程序的大小,比如Nokia S40系列的手機大部分接受的最大文件尺寸為64Kd)程序運行速度,速度是否可以忍受。七、從WTK到廠商SDK對于J2ME愛好者來說,基本上大家都是從SUN的WTK(J2ME Wirel
8、ess Toolkit)開始的,但是對于實際應用來說,僅僅使用WTK是遠遠不夠的,所以在學習過程中,必須完成從WTK到SDK的跨越。1、廠商SDK的下載地址?2、廠商SDK和WTK有什么不同?廠商SDK最簡單的理解就是在WTK的基礎上增加了自己的模擬器和自己的擴展API。也就是說,你在使用廠商的SDK時,可以使用廠商的擴展類庫,例如Nokia的UI類庫,和廠商自己的模擬器而已。每個廠商的擴展API都不多,而且不盡相同。3、如何使用?有些廠商SDK的使用都和WTK相同,例如SamSung。Nokia提供了獨立的界面來開發,但是這個界面在實際開發中使用不多。4、廠商SDK的問題廠商SDK實現過程中
9、,有一些bug,而且和真機實現不一致。例如NOKIA的混音播放問題等等。八、在J2ME中獲得手機IMEI的方法IMEI是Internation mobile entity identification的簡稱,在手機中輸入*#06#可以顯示該數字,長度為15位,全球唯一,永遠不會沖突,所以可以作為識別用戶的一個標志。下面是在J2ME中獲得IMEI的方法:1、MOTO系列的手機可以通過讀取系統的IMEI屬性獲得,代碼如下:String imei = System.getProperty("IMEI");2、SIEMENS系列的手機可以通過讀取系統的com.siemens.IME
10、I屬性獲得,代碼如下:String imei = System.getProperty("com.siemens.IMEI");九、J2ME網絡連接中顯示問題的解決辦法在網絡編程中,有些時候會出現一些在沒有接收到網絡數據就顯示界面的,造成界面顯示不符合要求(例如公告顯示,會先顯示公告的背景圖片再顯示公告信息),這里提一個簡單的解決辦法給大家:解決這種情況的方法分成三個步驟:1、在需要顯示的界面中,調用發送網絡數據的方法。每次顯示時調用該構造方法,不調用Display的setCurrent方法顯示。2、顯示等待界面(例如進度條等),給用戶提示,在進行網絡連接。3、在處理網絡反
11、饋的數據完以后,調用Display的setCurrent方法顯示顯示當前界面。十、增強J2ME的String能力分割字符串從JDK1.4以后,String類中新增了split方法來實現字符串的分割,但是在J2ME中卻沒有該方法(MIDP2.0中也沒有實現),但是在實際使用過程中,有些時候的確要用到這種操作,這里將我以前實現的一段代碼和大家共享:/* 分割字符串,原理:檢測字符串中的分割字符串,然后取子串* param original 需要分割的字符串* paran regex 分割字符串* return 分割后生成的字符串數組*/private static String split(Str
12、ing original,String regex)/取子串的起始位置int startIndex = 0;/將結果數據先放入Vector中Vector v = new Vector();/返回的結果字符串數組String str = null;/存儲取子串時起始位置int index = 0;/獲得匹配子串的位置startIndex = original.indexOf(regex);/System.out.println("0" + startIndex);/如果起始字符串的位置小于字符串的長度,則證明沒有取到字符串末尾。/-1代表取到了末尾while(startInd
13、ex < original.length() && startIndex != -1)String temp = original.substring(index,startIndex);System.out.println(" " + startIndex);/取子串v.addElement(temp);/設置取子串的起始位置index = startIndex + regex.length();/獲得匹配子串的位置startIndex = original.indexOf(regex,startIndex + regex.length();/取結束
14、的子串v.addElement(original.substring(index + 1 - regex.length();/將Vector對象轉換成數組str = new Stringv.size();for(int i=0;istri = (String)v.elementAt(i);/返回生成的數組return str;十一、J2ME在低級用戶界面上分行顯示文字在J2ME的低級用戶界面開發中,經常會遇到需要在Canvas上顯示大量的文字,例如關于界面、游戲說明、游戲公告等信息。如果在設計時,將文字的內容和長度都固定,既不利于修改也不利于維護。下面介紹一個簡單的方法,實現一個簡單、可維護性
15、強的方式。實現方法:1、將需要顯示的所有信息做成一個字符串。2、編寫一個將該字符串按照要求轉換為字符串數組的方法。3、將轉換后的數組以循環的方式顯示在Canvas上。通過這樣三個步驟,則修改顯示的信息時,只需要修改包含顯示信息的字符串即可,自己書寫的方法可以按照以前的標準重新分割新的字符串。如果需要修改每行顯示的字符個數,則只需要修改自己書寫的方法即可。通過這樣一種實現方式,可以很方便的實現顯示一些比較長的文本信息,即使是可變長度的字符串也沒有問題。十二、J2ME中使用記錄存儲系統(RMS)存儲信息在MIDP中,沒有文件的概念,所以永久存儲一般只能依靠記錄存儲系統實現,關于記錄存儲系統的簡介,
16、可以參看教程:下面是一些記錄存儲系統的常用編碼介紹:1、打開記錄集:打開記錄集使用RecordStore里面的靜態方法openRecordStore,示例代碼如下:RecordStore rs = RecordStore.openRecordStore(“username”,true);這樣就打開了一個名稱為rs的記錄集,其中username為記錄集的名稱,該名稱可以根據需要來取,第二個參數代表是否則沒有時創建新的記錄集,true代表在該記錄集不存在時,創建新的記錄集,false代表不創建。如果在打開記錄集時,該記錄集不存在,則拋出RecordStoreNotFoundException異常,
17、所以檢測記錄集是否已創建可以使用該異常。注意:記錄集打開以后記得關閉。2、向記錄集中寫入數據2.1增加數據向已經打開的記錄集中添加數據,需要使用addRecord方法,示例代碼:byte bytes = 1,2,3;int id = rs. addRecord(bytes,0,bytes.length);該代碼將字節數組bytes的全部內容寫入到記錄集中,該方法的返回值為該信息的id,注意:id從1開始,而不是從0開始。你可以循環使用該方法向記錄集中寫入多條數據。2.2修改數據修改已經存在的記錄集中指定id的數據,需要使用setRecord方法,示例代碼:byte bytes = 1,2,3;
18、rs. setRecord(1,bytes,0,bytes.length);以上代碼的作用是將字節數組bytes的全部內容寫入到id為1的記錄集rs中。該操作會覆蓋已有的數據。說明:有些時候,你需要將信息寫入到記錄集中的第一條記錄中,則可以結合以上兩個方法,則第一次時向記錄集增加數據,以后來進行修改。3、從記錄集中讀出數據從記錄集中讀取已有數據,需要使用getRecord方法,示例代碼:byte bytes = rs. getRecord(1);該代碼從記錄集rs中讀取第一條數據,將讀取到的數據放在bytes數組中。在讀取數據時,可以獲得記錄集中id的個數,可以使用getNumRecords方
19、法獲得綜合代碼為:int number = rs. getNumRecords();int id = 1;if(id >0 && id < number)byte bytes = rs. getRecord(1);4、從記錄集中刪除記錄從記錄集中刪除記錄的方法有兩種:邏輯刪除和物理刪除。邏輯刪除是指給刪除的記錄打標記。物理刪除是指從物理上刪除該記錄,但是該記錄的id不能被重用,也就是說該id不會被繼續使用。例如一個記錄集中有5個記錄,假設你刪除了id為3的數據,則剩余記錄的id依然為1、2、4、5。這給便歷帶來了一定的麻煩。5、便歷記錄集便歷記錄集,即訪問記錄集中的
20、所有數據,有兩個方法,詳見:6、其他操作6.1刪除記錄集刪除記錄集不同于刪除記錄,需要使用deleteRecordStore方法,示例代碼:RecordStore. deleteRecordStore(“username”);該代碼刪除名稱為username的記錄集。十三、J2ME加密數據的一個第三方開源免費類庫介紹在J2ME編程中,經常遇到一些數據在存儲或者傳輸時需要加密,下面介紹一個第三方的加密類庫的一些資料:加密類庫的官方主頁:/介紹的文章:中文:英文:該文章的源代碼包含使用的一些方法。備注:因為該類庫提供的功能比較強大,所以類庫的尺寸
21、比較大,最后在發布時需要將類庫中不需要的類刪除十四、如何播放聲音在J2ME中,處理聲音需要使用到Mobile Media API(MMAPI),該包是MIDP1.0的可選包,在MIDP2.0中已經包含了這個包。所以如果你使用MIDP1.0的話,請確認你的運行環境是否支持。一般手機支持的聲音文件格式為wav、mid和mpg等。具體請查閱你的手機說明文檔。在聲音處理中,有很多處理的方式,這里說一下最常用的情況,播放JAR文件中的wav文件。播放聲音文件的流程:1、按照一定的格式讀取聲音文件。播放JAR文件中的聲音文件一般是將聲音文件處理成流的形式。示例代碼:InputStream is = this.getClass().getResourceAsStream("/Autorun.wav");其中Autorun.wav文件位于JAR文件的根目錄下,如果位于別的目錄,需要加上目錄名稱,如/res /Autorun.wav。2、將讀取到的內容傳遞給播放器。將流信息傳遞給播放器,播放器按照一定的格式來進行解碼操作,示例代碼:Player player = Manager.createPlayer(is,"audio/x-wav");其中第
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
評論
0/150
提交評論