J2ME程序開(kāi)發(fā)全方位基礎(chǔ)匯總_第1頁(yè)
J2ME程序開(kāi)發(fā)全方位基礎(chǔ)匯總_第2頁(yè)
J2ME程序開(kāi)發(fā)全方位基礎(chǔ)匯總_第3頁(yè)
J2ME程序開(kāi)發(fā)全方位基礎(chǔ)匯總_第4頁(yè)
J2ME程序開(kāi)發(fā)全方位基礎(chǔ)匯總_第5頁(yè)
已閱讀5頁(yè),還剩7頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、J2ME程序開(kāi)發(fā)全方位基礎(chǔ)匯總一、J2ME中需要的Java基礎(chǔ)知識(shí)現(xiàn)在有大部分人,都是從零開(kāi)始學(xué)j2me的,學(xué)習(xí)J2ME的時(shí)候,總是從Java基礎(chǔ)開(kāi)始學(xué)習(xí),而且現(xiàn)在講Java基礎(chǔ)的書(shū)籍中都是以J2SE來(lái)講基礎(chǔ),這就給學(xué)習(xí)造成了一些不必要的麻煩,下面將J2ME中用到的和不需要的Java基礎(chǔ)知識(shí)做一個(gè)簡(jiǎn)單的說(shuō)明:J2ME中使用到的Java基礎(chǔ)知識(shí):1、Java語(yǔ)法基礎(chǔ):包括基本數(shù)據(jù)類(lèi)型、關(guān)鍵字、運(yùn)算符等等2、面向?qū)ο蟮乃枷耄侯?lèi)和對(duì)象的概念,繼承和多態(tài)等等。3、異常處理4、多線程J2ME中沒(méi)有用到的Java基礎(chǔ)知識(shí):1、jdk中javac和java命令的使用2、Java基礎(chǔ)中的很多類(lèi)在J2ME中沒(méi)有

2、,或者類(lèi)中的方法做了大量的精簡(jiǎn)。所以建議在J2ME中熟悉類(lèi)庫(kù)。3、Applet、AWT、Swing這些知識(shí)在J2ME中根本使用不到。簡(jiǎn)單說(shuō)這么多,希望學(xué)J2ME的朋友們能少走一些彎路,不足之處希望大家積極指正和補(bǔ)充。二、J2ME中暫時(shí)無(wú)法完成的功能列一些J2ME中暫時(shí)無(wú)法完成的功能,希望大家能積極補(bǔ)充:1、在手機(jī)中不更改代碼實(shí)現(xiàn)移植,主要指游戲。2、動(dòng)態(tài)修改按鈕文字。3、在Canvas上接受中文輸入。4、操作本地資源、例如地址本、已收短信息等。5、制作破壞性的手機(jī)病毒。6、其他等待大家來(lái)補(bǔ)充。三、J2ME的跨平臺(tái)性J2ME技術(shù)源于Java,所以也具有JVM的優(yōu)勢(shì),可以在支持Java的平臺(tái)上進(jìn)行

3、移植,但是現(xiàn)在的J2ME技術(shù)在跨平臺(tái)上卻做的很糟糕,我們來(lái)簡(jiǎn)單看一下原因:1、手機(jī)的屏幕尺寸不一:這個(gè)主要在界面制作上。如果你使用的是高級(jí)用戶(hù)界面,比如你做的是應(yīng)用開(kāi)發(fā)或者用戶(hù)登陸、用戶(hù)注冊(cè)這樣的通用功能時(shí),一般沒(méi)有什么問(wèn)題。如果你使用的是低級(jí)用戶(hù)界面,比如你做的是游戲,那么你就需要考慮這個(gè)問(wèn)題了。2、廠商的擴(kuò)展API不統(tǒng)一:例如Nokia的擴(kuò)展API類(lèi)庫(kù)UI系列,在別的手機(jī)上或者沒(méi)有實(shí)現(xiàn),或者包名不同等等。3、手機(jī)平臺(tái)上實(shí)現(xiàn)的bug:例如Nokia的7650在實(shí)現(xiàn)雙緩沖上有bug,那么在這種機(jī)型上運(yùn)行的軟件就不能使用雙緩沖。其他NOKIA上的一些bug,可以參看:4、手機(jī)性能問(wèn)題。不同手機(jī)的

4、可用內(nèi)存、最大jar文件都有要求,例如Nokia S40的大部分手機(jī)支持的最大jar文件為64K,最大可用內(nèi)容為210K。所以現(xiàn)在的手機(jī)軟件,特別是游戲都提供支持的機(jī)型列表,也才有了手機(jī)游戲移植人員的存在。四、學(xué)習(xí)J2ME可以從事的工作種類(lèi)現(xiàn)在J2ME技術(shù)可以說(shuō)相當(dāng)?shù)幕鸨?,這里介紹一些學(xué)好了J2ME之后可以從事的工作的種類(lèi):1、J2ME游戲開(kāi)發(fā)人員根據(jù)游戲策劃或者文檔要求,在某種特定的機(jī)型(以Nokia S40或S60居多)開(kāi)發(fā)游戲程序。這是現(xiàn)在大部分J2ME程序員從事的工作。需要熟練掌握:高級(jí)用戶(hù)界面、低級(jí)用戶(hù)界面、線程,如果是網(wǎng)絡(luò)游戲,還需要熟練網(wǎng)絡(luò)編程。2、J2ME應(yīng)用開(kāi)發(fā)人員現(xiàn)在的移動(dòng)

5、應(yīng)用還不是很多,但是還是出現(xiàn)了一些,特別是移動(dòng)定位以及移動(dòng)商務(wù)相關(guān)的內(nèi)容。需要熟練掌握:高級(jí)用戶(hù)界面、線程和網(wǎng)絡(luò)編程。3、J2ME游戲移植人員參照源代碼,將可以在一個(gè)平臺(tái)上可以運(yùn)行的游戲移植到其他平臺(tái)上去。例如將Nokia S40的游戲移植到S60上,或者索愛(ài)的T618等等。主要是控制屏幕坐標(biāo),有些可能需要替換一些API。需要熟悉各平臺(tái)之間的差異以及相關(guān)的技術(shù)參數(shù),比如屏幕大小、最大jar文件尺寸等等。五、J2ME程序設(shè)計(jì)的幾個(gè)原則1、使用面向?qū)ο缶幊?。雖然使用面向過(guò)程編程可以減小文件的尺寸,但是為了以后維護(hù)的方便和利于擴(kuò)展,還是要使用面向?qū)ο缶幊獭?、使用MVC模式將模型、界面和控制分離?,F(xiàn)

6、在很多的程序?qū)⑷吆弦?,但是如果你做的程序比較大的話,還是建議你進(jìn)行分離。3、自動(dòng)存儲(chǔ)用戶(hù)設(shè)定使用RMS來(lái)存儲(chǔ)用戶(hù)的信息,例如存儲(chǔ)用戶(hù)上次輸入的用戶(hù)名、密碼、用戶(hù)對(duì)于系統(tǒng)的設(shè)定等,這樣不僅可以減少用戶(hù)的輸入,而且對(duì)用戶(hù)友好。很多程序甚至做了自動(dòng)登陸等。4、一些系統(tǒng)設(shè)置允許用戶(hù)關(guān)閉。如背景音樂(lè)、背景燈顯示等。5、將低級(jí)用戶(hù)界面的繪制動(dòng)作放在一個(gè)獨(dú)立的線程里面去。6、在需要大量時(shí)間才能完成的工作時(shí),給用戶(hù)一個(gè)等待界面。六、從模擬器到真機(jī)測(cè)試對(duì)于J2ME開(kāi)發(fā)者來(lái)說(shuō),模擬器給我們帶來(lái)了很多方便,比如可以在模擬器中調(diào)試程序以及很方便的察看程序的效果,但是模擬器也給我們帶來(lái)了一些問(wèn)題,比如模擬器實(shí)現(xiàn)的bu

7、g等等,所以進(jìn)行真機(jī)測(cè)試是必須的。1、為什么要進(jìn)行真機(jī)測(cè)試?因?yàn)槟M器程序可能存在bug,以及真機(jī)的性能有限,所以必須進(jìn)行真機(jī)測(cè)試。2、如何將程序傳輸?shù)綑C(jī)器中?將程序傳輸?shù)綑C(jī)器中有如下方式:a)OTA下載b)使用數(shù)據(jù)線傳輸c)紅外傳輸d)藍(lán)牙你可以根據(jù)條件,選擇合適的方式。3、 真機(jī)測(cè)試主要測(cè)什么?真機(jī)測(cè)試的內(nèi)容很多,主要測(cè)試以下幾個(gè)方面:a)程序的功能b)程序的操作性,是否易操作c)程序的大小,比如Nokia S40系列的手機(jī)大部分接受的最大文件尺寸為64Kd)程序運(yùn)行速度,速度是否可以忍受。七、從WTK到廠商SDK對(duì)于J2ME愛(ài)好者來(lái)說(shuō),基本上大家都是從SUN的WTK(J2ME Wirel

8、ess Toolkit)開(kāi)始的,但是對(duì)于實(shí)際應(yīng)用來(lái)說(shuō),僅僅使用WTK是遠(yuǎn)遠(yuǎn)不夠的,所以在學(xué)習(xí)過(guò)程中,必須完成從WTK到SDK的跨越。1、廠商SDK的下載地址?2、廠商SDK和WTK有什么不同?廠商SDK最簡(jiǎn)單的理解就是在WTK的基礎(chǔ)上增加了自己的模擬器和自己的擴(kuò)展API。也就是說(shuō),你在使用廠商的SDK時(shí),可以使用廠商的擴(kuò)展類(lèi)庫(kù),例如Nokia的UI類(lèi)庫(kù),和廠商自己的模擬器而已。每個(gè)廠商的擴(kuò)展API都不多,而且不盡相同。3、如何使用?有些廠商SDK的使用都和WTK相同,例如SamSung。Nokia提供了獨(dú)立的界面來(lái)開(kāi)發(fā),但是這個(gè)界面在實(shí)際開(kāi)發(fā)中使用不多。4、廠商SDK的問(wèn)題廠商SDK實(shí)現(xiàn)過(guò)程中

9、,有一些bug,而且和真機(jī)實(shí)現(xiàn)不一致。例如NOKIA的混音播放問(wèn)題等等。八、在J2ME中獲得手機(jī)IMEI的方法IMEI是Internation mobile entity identification的簡(jiǎn)稱(chēng),在手機(jī)中輸入*#06#可以顯示該數(shù)字,長(zhǎng)度為15位,全球唯一,永遠(yuǎn)不會(huì)沖突,所以可以作為識(shí)別用戶(hù)的一個(gè)標(biāo)志。下面是在J2ME中獲得IMEI的方法:1、MOTO系列的手機(jī)可以通過(guò)讀取系統(tǒng)的IMEI屬性獲得,代碼如下:String imei = System.getProperty("IMEI");2、SIEMENS系列的手機(jī)可以通過(guò)讀取系統(tǒng)的com.siemens.IME

10、I屬性獲得,代碼如下:String imei = System.getProperty("com.siemens.IMEI");九、J2ME網(wǎng)絡(luò)連接中顯示問(wèn)題的解決辦法在網(wǎng)絡(luò)編程中,有些時(shí)候會(huì)出現(xiàn)一些在沒(méi)有接收到網(wǎng)絡(luò)數(shù)據(jù)就顯示界面的,造成界面顯示不符合要求(例如公告顯示,會(huì)先顯示公告的背景圖片再顯示公告信息),這里提一個(gè)簡(jiǎn)單的解決辦法給大家:解決這種情況的方法分成三個(gè)步驟:1、在需要顯示的界面中,調(diào)用發(fā)送網(wǎng)絡(luò)數(shù)據(jù)的方法。每次顯示時(shí)調(diào)用該構(gòu)造方法,不調(diào)用Display的setCurrent方法顯示。2、顯示等待界面(例如進(jìn)度條等),給用戶(hù)提示,在進(jìn)行網(wǎng)絡(luò)連接。3、在處理網(wǎng)絡(luò)反

11、饋的數(shù)據(jù)完以后,調(diào)用Display的setCurrent方法顯示顯示當(dāng)前界面。十、增強(qiáng)J2ME的String能力分割字符串從JDK1.4以后,String類(lèi)中新增了split方法來(lái)實(shí)現(xiàn)字符串的分割,但是在J2ME中卻沒(méi)有該方法(MIDP2.0中也沒(méi)有實(shí)現(xiàn)),但是在實(shí)際使用過(guò)程中,有些時(shí)候的確要用到這種操作,這里將我以前實(shí)現(xiàn)的一段代碼和大家共享:/* 分割字符串,原理:檢測(cè)字符串中的分割字符串,然后取子串* param original 需要分割的字符串* paran regex 分割字符串* return 分割后生成的字符串?dāng)?shù)組*/private static String split(Str

12、ing original,String regex)/取子串的起始位置int startIndex = 0;/將結(jié)果數(shù)據(jù)先放入Vector中Vector v = new Vector();/返回的結(jié)果字符串?dāng)?shù)組String str = null;/存儲(chǔ)取子串時(shí)起始位置int index = 0;/獲得匹配子串的位置startIndex = original.indexOf(regex);/System.out.println("0" + startIndex);/如果起始字符串的位置小于字符串的長(zhǎng)度,則證明沒(méi)有取到字符串末尾。/-1代表取到了末尾while(startInd

13、ex < original.length() && startIndex != -1)String temp = original.substring(index,startIndex);System.out.println(" " + startIndex);/取子串v.addElement(temp);/設(shè)置取子串的起始位置index = startIndex + regex.length();/獲得匹配子串的位置startIndex = original.indexOf(regex,startIndex + regex.length();/取結(jié)束

14、的子串v.addElement(original.substring(index + 1 - regex.length();/將Vector對(duì)象轉(zhuǎn)換成數(shù)組str = new Stringv.size();for(int i=0;istri = (String)v.elementAt(i);/返回生成的數(shù)組return str;十一、J2ME在低級(jí)用戶(hù)界面上分行顯示文字在J2ME的低級(jí)用戶(hù)界面開(kāi)發(fā)中,經(jīng)常會(huì)遇到需要在Canvas上顯示大量的文字,例如關(guān)于界面、游戲說(shuō)明、游戲公告等信息。如果在設(shè)計(jì)時(shí),將文字的內(nèi)容和長(zhǎng)度都固定,既不利于修改也不利于維護(hù)。下面介紹一個(gè)簡(jiǎn)單的方法,實(shí)現(xiàn)一個(gè)簡(jiǎn)單、可維護(hù)性

15、強(qiáng)的方式。實(shí)現(xiàn)方法:1、將需要顯示的所有信息做成一個(gè)字符串。2、編寫(xiě)一個(gè)將該字符串按照要求轉(zhuǎn)換為字符串?dāng)?shù)組的方法。3、將轉(zhuǎn)換后的數(shù)組以循環(huán)的方式顯示在Canvas上。通過(guò)這樣三個(gè)步驟,則修改顯示的信息時(shí),只需要修改包含顯示信息的字符串即可,自己書(shū)寫(xiě)的方法可以按照以前的標(biāo)準(zhǔn)重新分割新的字符串。如果需要修改每行顯示的字符個(gè)數(shù),則只需要修改自己書(shū)寫(xiě)的方法即可。通過(guò)這樣一種實(shí)現(xiàn)方式,可以很方便的實(shí)現(xiàn)顯示一些比較長(zhǎng)的文本信息,即使是可變長(zhǎng)度的字符串也沒(méi)有問(wèn)題。十二、J2ME中使用記錄存儲(chǔ)系統(tǒng)(RMS)存儲(chǔ)信息在MIDP中,沒(méi)有文件的概念,所以永久存儲(chǔ)一般只能依靠記錄存儲(chǔ)系統(tǒng)實(shí)現(xiàn),關(guān)于記錄存儲(chǔ)系統(tǒng)的簡(jiǎn)介,

16、可以參看教程:下面是一些記錄存儲(chǔ)系統(tǒng)的常用編碼介紹:1、打開(kāi)記錄集:打開(kāi)記錄集使用RecordStore里面的靜態(tài)方法openRecordStore,示例代碼如下:RecordStore rs = RecordStore.openRecordStore(“username”,true);這樣就打開(kāi)了一個(gè)名稱(chēng)為rs的記錄集,其中username為記錄集的名稱(chēng),該名稱(chēng)可以根據(jù)需要來(lái)取,第二個(gè)參數(shù)代表是否則沒(méi)有時(shí)創(chuàng)建新的記錄集,true代表在該記錄集不存在時(shí),創(chuàng)建新的記錄集,false代表不創(chuàng)建。如果在打開(kāi)記錄集時(shí),該記錄集不存在,則拋出RecordStoreNotFoundException異常,

17、所以檢測(cè)記錄集是否已創(chuàng)建可以使用該異常。注意:記錄集打開(kāi)以后記得關(guān)閉。2、向記錄集中寫(xiě)入數(shù)據(jù)2.1增加數(shù)據(jù)向已經(jīng)打開(kāi)的記錄集中添加數(shù)據(jù),需要使用addRecord方法,示例代碼:byte bytes = 1,2,3;int id = rs. addRecord(bytes,0,bytes.length);該代碼將字節(jié)數(shù)組bytes的全部?jī)?nèi)容寫(xiě)入到記錄集中,該方法的返回值為該信息的id,注意:id從1開(kāi)始,而不是從0開(kāi)始。你可以循環(huán)使用該方法向記錄集中寫(xiě)入多條數(shù)據(jù)。2.2修改數(shù)據(jù)修改已經(jīng)存在的記錄集中指定id的數(shù)據(jù),需要使用setRecord方法,示例代碼:byte bytes = 1,2,3;

18、rs. setRecord(1,bytes,0,bytes.length);以上代碼的作用是將字節(jié)數(shù)組bytes的全部?jī)?nèi)容寫(xiě)入到id為1的記錄集rs中。該操作會(huì)覆蓋已有的數(shù)據(jù)。說(shuō)明:有些時(shí)候,你需要將信息寫(xiě)入到記錄集中的第一條記錄中,則可以結(jié)合以上兩個(gè)方法,則第一次時(shí)向記錄集增加數(shù)據(jù),以后來(lái)進(jìn)行修改。3、從記錄集中讀出數(shù)據(jù)從記錄集中讀取已有數(shù)據(jù),需要使用getRecord方法,示例代碼:byte bytes = rs. getRecord(1);該代碼從記錄集rs中讀取第一條數(shù)據(jù),將讀取到的數(shù)據(jù)放在bytes數(shù)組中。在讀取數(shù)據(jù)時(shí),可以獲得記錄集中id的個(gè)數(shù),可以使用getNumRecords方

19、法獲得綜合代碼為:int number = rs. getNumRecords();int id = 1;if(id >0 && id < number)byte bytes = rs. getRecord(1);4、從記錄集中刪除記錄從記錄集中刪除記錄的方法有兩種:邏輯刪除和物理刪除。邏輯刪除是指給刪除的記錄打標(biāo)記。物理刪除是指從物理上刪除該記錄,但是該記錄的id不能被重用,也就是說(shuō)該id不會(huì)被繼續(xù)使用。例如一個(gè)記錄集中有5個(gè)記錄,假設(shè)你刪除了id為3的數(shù)據(jù),則剩余記錄的id依然為1、2、4、5。這給便歷帶來(lái)了一定的麻煩。5、便歷記錄集便歷記錄集,即訪問(wèn)記錄集中的

20、所有數(shù)據(jù),有兩個(gè)方法,詳見(jiàn):6、其他操作6.1刪除記錄集刪除記錄集不同于刪除記錄,需要使用deleteRecordStore方法,示例代碼:RecordStore. deleteRecordStore(“username”);該代碼刪除名稱(chēng)為username的記錄集。十三、J2ME加密數(shù)據(jù)的一個(gè)第三方開(kāi)源免費(fèi)類(lèi)庫(kù)介紹在J2ME編程中,經(jīng)常遇到一些數(shù)據(jù)在存儲(chǔ)或者傳輸時(shí)需要加密,下面介紹一個(gè)第三方的加密類(lèi)庫(kù)的一些資料:加密類(lèi)庫(kù)的官方主頁(yè):/介紹的文章:中文:英文:該文章的源代碼包含使用的一些方法。備注:因?yàn)樵擃?lèi)庫(kù)提供的功能比較強(qiáng)大,所以類(lèi)庫(kù)的尺寸

21、比較大,最后在發(fā)布時(shí)需要將類(lèi)庫(kù)中不需要的類(lèi)刪除十四、如何播放聲音在J2ME中,處理聲音需要使用到Mobile Media API(MMAPI),該包是MIDP1.0的可選包,在MIDP2.0中已經(jīng)包含了這個(gè)包。所以如果你使用MIDP1.0的話,請(qǐng)確認(rèn)你的運(yùn)行環(huán)境是否支持。一般手機(jī)支持的聲音文件格式為wav、mid和mpg等。具體請(qǐng)查閱你的手機(jī)說(shuō)明文檔。在聲音處理中,有很多處理的方式,這里說(shuō)一下最常用的情況,播放JAR文件中的wav文件。播放聲音文件的流程:1、按照一定的格式讀取聲音文件。播放JAR文件中的聲音文件一般是將聲音文件處理成流的形式。示例代碼:InputStream is = this.getClass().getResourceAsStream("/Autorun.wav");其中Autorun.wav文件位于JAR文件的根目錄下,如果位于別的目錄,需要加上目錄名稱(chēng),如/res /Autorun.wav。2、將讀取到的內(nèi)容傳遞給播放器。將流信息傳遞給播放器,播放器按照一定的格式來(lái)進(jìn)行解碼操作,示例代碼:Player player = Manager.createPlayer(is,"audio/x-wav");其中第

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論