JavaMe教案學(xué)習(xí)資料_第1頁
JavaMe教案學(xué)習(xí)資料_第2頁
JavaMe教案學(xué)習(xí)資料_第3頁
JavaMe教案學(xué)習(xí)資料_第4頁
JavaMe教案學(xué)習(xí)資料_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

O、JavaMe體系架構(gòu)一、J2ME中使用到的Java基礎(chǔ)知識(shí):1、Java語法基礎(chǔ):包括基本數(shù)據(jù)類型、關(guān)鍵字、運(yùn)算符等等2、面向?qū)ο蟮乃枷耄侯惡蛯ο蟮母拍睿^承和多態(tài)等等。3、異常處理4、多線程J2ME中沒有用到的Java基礎(chǔ)知識(shí):1、JDK中javac和java命令的使用2、Java基礎(chǔ)中的很多類在J2ME中沒有,或者類中的方法做了大量的精簡。所以建議在J2ME中熟悉類庫。3、Applet、AWT、Swing這些知識(shí)在J2ME中根本使用不到。二、J2ME中暫時(shí)無法完成的功能列舉一些J2ME中暫時(shí)無法完成的功能:1、在手機(jī)中不更改代碼實(shí)現(xiàn)移植,主要指游戲。2、動(dòng)態(tài)修改按鈕文字。3、在Canvas上接受中文輸入。4、操作本地資源、例如地址本、已收短信息等。5、制作破壞性的手機(jī)病毒。三、J2ME的跨平臺(tái)性J2ME技術(shù)源于Java,所以也具有JVM的優(yōu)勢,可以在支持Java的平臺(tái)上進(jìn)行移植,但是現(xiàn)在的J2ME技術(shù)在跨平臺(tái)上卻做的很糟糕,我們來簡單看一下原因:1、手機(jī)的屏幕尺寸不一:這個(gè)主要在界面制作上。如果你使用的是高級(jí)用戶界面,比如你做的是應(yīng)用開發(fā)或者用戶登陸、用戶注冊這樣的通用功能時(shí),一般沒有什么問題。如果你使用的是低級(jí)用戶界面,比如你做的是游戲,那么你就需要考慮這個(gè)問題了。2、廠商的擴(kuò)展API不統(tǒng)一:例如Nokia的擴(kuò)展API類庫UI系列,在別的手機(jī)上或者沒有實(shí)現(xiàn),或者包名不同等等。3、手機(jī)平臺(tái)上實(shí)現(xiàn)的bug:某些手機(jī)型號(hào)在支持javame某些功能時(shí)有bug,那么在這種機(jī)型上運(yùn)行的軟件就不能使用這種功能。4、手機(jī)性能問題。不同手機(jī)的可用內(nèi)存、最大jar文件都有要求,例如NokiaS40的大部分手機(jī)支持的最大jar文件為64K,最大可用內(nèi)容為210K。所以現(xiàn)在的手機(jī)軟件,特別是游戲都提供支持的機(jī)型列表,也才有了手機(jī)游戲移植人員的存在。四、學(xué)習(xí)J2ME可以從事的工作種類現(xiàn)在J2ME技術(shù)可以說相當(dāng)?shù)幕鸨?,這里介紹一些學(xué)好了J2ME之后可以從事的工作的種類:1、J2ME游戲開發(fā)人員根據(jù)游戲策劃或者文檔要求,在某種特定的機(jī)型(以NokiaS40或S60居多)開發(fā)游戲程序。這是現(xiàn)在大部分J2ME程序員從事的工作。需要熟練掌握:高級(jí)用戶界面、低級(jí)用戶界面、線程,如果是網(wǎng)絡(luò)游戲,還需要熟練網(wǎng)絡(luò)編程。2、J2ME應(yīng)用開發(fā)人員現(xiàn)在的移動(dòng)應(yīng)用還不是很多,但是還是出現(xiàn)了一些,特別是移動(dòng)定位以及移動(dòng)商務(wù)相關(guān)的內(nèi)容。需要熟練掌握:高級(jí)用戶界面、線程和網(wǎng)絡(luò)編程。3、J2ME游戲移植人員參照源代碼,將可以在一個(gè)平臺(tái)上可以運(yùn)行的游戲移植到其他平臺(tái)上去。例如將NokiaS40的游戲移植到S60上,或者索愛的T618等等。主要是控制屏幕坐標(biāo),有些可能需要替換一些API。需要熟悉各平臺(tái)之間的差異以及相關(guān)的技術(shù)參數(shù),比如屏幕大小、最大jar文件尺寸等等。J2ME簡明教程第一章J2ME開發(fā)簡介目標(biāo):掌握J(rèn)2ME的基本概念,了解CLDC特性,對手機(jī)開發(fā)有整體上的認(rèn)識(shí)。1.1J2ME基本概念手機(jī)上的應(yīng)用軟件經(jīng)歷了3個(gè)階段:僅提供基本通話功能簡單的應(yīng)用程序(電話簿)網(wǎng)絡(luò)功能(WAP)使用人群的增長,手機(jī)廠商依然閉門造車,導(dǎo)致2個(gè)問題的出現(xiàn):沒有開放的平臺(tái),各自的軟件不能相互使用。訪問Internet只能通過WAP方式。J2ME的出現(xiàn)解決了遇到的問題:J2ME可以跨平臺(tái),可以開發(fā)可移植性好的無線應(yīng)用程序。為目前發(fā)展迅速的手機(jī)游戲市場提供了契機(jī)。J2ME提供了HTTP、TCP等高級(jí)的網(wǎng)絡(luò)協(xié)議訪問網(wǎng)絡(luò)的方式。發(fā)展趨勢:無線移動(dòng)和嵌入式市場將是互聯(lián)網(wǎng)未來競爭的焦點(diǎn)。目前,Java技術(shù)在網(wǎng)絡(luò)和嵌入式的應(yīng)用非常廣泛。63%的開發(fā)商認(rèn)為,對于嵌入式和小型器件,Java技術(shù)是第一通用平臺(tái),而J2ME就是這一通用平臺(tái)的重要開發(fā)技術(shù)平臺(tái)。在大家正式認(rèn)識(shí)Java2MicroEdition之前,我們先為各位介紹目前所有支持Java2MicroEdition的行動(dòng)電話,我們可以發(fā)現(xiàn)不管是歐、美、日大廠的手機(jī)都開始大力支持Java2MicroEdition,藉此介紹可以讓大家體認(rèn),為何了解Java2MicroEdition,以及學(xué)習(xí)如何用Java撰寫手機(jī)上應(yīng)用程序肯定是一個(gè)無可避免的趨勢。SonyEricsson,Nokia,Motorola,Siemens應(yīng)用領(lǐng)域:適合各類小型嵌入式設(shè)備以及消費(fèi)電子類產(chǎn)品。應(yīng)用前景:J2ME憑借廣闊的運(yùn)行平臺(tái)、良好的可移植性以及較短的開發(fā)周期成為軟件市場上較為熱門的技術(shù),并備受服務(wù)提供商和電信運(yùn)營商的青睞。手機(jī)硬件水平的不斷提高以及娛樂功能的增強(qiáng),勢必突顯J2ME在手機(jī)應(yīng)用以及游戲軟件方面的技術(shù)特長。1.1.1J2ME簡介Java是1995年6月由Sun公司推出的,具有易用性、平臺(tái)無關(guān)性、易移植性等諸多特征。Java語言的特點(diǎn)使其得到了廣泛應(yīng)用。Java語言程序開發(fā)費(fèi)用少,工作效率高,擁有良好的用戶界面和強(qiáng)大的開發(fā)工具。Java語言的前身是Oak項(xiàng)目,原本就是為嵌入式領(lǐng)域設(shè)計(jì)的,但卻沒有順利進(jìn)入嵌入式領(lǐng)域,而是隨著Internet的發(fā)展占領(lǐng)了PC端以及Server端后,又回到了嵌入式領(lǐng)域。用于嵌入式的Java稱為Java2MicroEdition,簡稱J2ME,即Java2微型版。使用J2ME進(jìn)行無線應(yīng)用程序開發(fā)還具有許多Java本身的優(yōu)點(diǎn):1.平臺(tái)無關(guān)性:引進(jìn)虛擬機(jī)原理,并運(yùn)行于虛擬機(jī)。Java的數(shù)據(jù)類型與機(jī)器無關(guān),JVM是建立在硬件和操作系統(tǒng)之上,實(shí)現(xiàn)二進(jìn)制代碼的解釋執(zhí)行功能。2.安全性:舍棄了C++的指針,避免了對存儲(chǔ)器地址的直接訪問。對程序提供了安全管理器,防止程序的非法訪問。字節(jié)碼驗(yàn)證過程保證了程序不能訪問內(nèi)存空間或使用其域外的資源,字節(jié)碼驗(yàn)證程序還防止應(yīng)用程序重載Java語言核心庫,這是一種可以用來繞過其他應(yīng)用程序級(jí)安全性措施的方法。J2ME使用網(wǎng)絡(luò)安全SSL協(xié)議,可以確保無線傳輸中的信息安全3.面向?qū)ο笫沟贸绦騿T可以把主要精力用在類和接口的設(shè)計(jì)和應(yīng)用上。4.分布式J2ME建立在擴(kuò)展無線網(wǎng)絡(luò)平臺(tái)上。庫函數(shù)提供了無線連接協(xié)議傳送和接收信息的方法,使得程序員使用網(wǎng)絡(luò)上的文件和使用本機(jī)文件一樣容易。5.圖形界面和多媒體功能J2ME提供了豐富的用戶界面和事件處理功能,同時(shí)提供了游戲、視頻以及音效的開發(fā)功能。1.1.2JVM、CVM和KVM的介紹J2ME廣闊的運(yùn)行平臺(tái),良好的可移植性是通過將字節(jié)碼文件運(yùn)行于Sun的K虛擬機(jī)(KVM)上實(shí)現(xiàn)的。JVM:Java2標(biāo)準(zhǔn)版Java虛擬機(jī),主要使用在J2EE和J2SE中,應(yīng)用在系統(tǒng)資源相當(dāng)豐富的設(shè)備上。32MKVM:是一個(gè)專門為小型或者資源受限設(shè)備所設(shè)計(jì)的緊湊的、便攜的虛擬機(jī)。通常只有128K或者更小。CVM:是為用戶和嵌入式設(shè)備設(shè)計(jì)的完全功能性VM,功能比KVM更加強(qiáng)大。CVM和KVM是由JVM演變過來的。MIDlet(移動(dòng)信息設(shè)備小程序)主要使用KVM。J2ME應(yīng)用程序并不一定只能使用KVM,J2ME技術(shù)可以使用任何虛擬機(jī),不過至少應(yīng)當(dāng)具有KVM所實(shí)現(xiàn)的功能。1.1.3配置——Configuration移動(dòng)設(shè)備廠商眾多,而且功能和具體接口都不相同,J2ME在開發(fā)的通用性方面是通過一個(gè)特殊的配置文件來實(shí)現(xiàn)的。J2ME將不同的設(shè)備進(jìn)行分類,形成了一定的規(guī)范。不同設(shè)備的開發(fā)需要遵循這些規(guī)范。每個(gè)配置為一組通用設(shè)備提供最小的Java平臺(tái),這些配置文件就是對具體的硬件類型進(jìn)行配置,方便J2ME辨認(rèn)不同類型設(shè)備。J2ME大致將嵌入式設(shè)備區(qū)分為兩種:資源有限,包括運(yùn)算功能有限、電力供應(yīng)有限、聯(lián)機(jī)速度有限或是屏幕顯示大小與色彩有限的嵌入式設(shè)備。資源相對無限設(shè)備,通常運(yùn)算能力較好,并且在電力供應(yīng)、聯(lián)機(jī)速度上相對較充足的嵌入式設(shè)備。例如:機(jī)頂盒、微波爐等。思考:手機(jī)屬于哪一類呢?可以把Configuration當(dāng)作是J2ME規(guī)定嵌入式設(shè)備能夠執(zhí)行Java程序的規(guī)范(或者說是對在目標(biāo)設(shè)備上運(yùn)行Java程序的最低要求)。定義了這些設(shè)備至少要符合的運(yùn)算能力、供電能力、內(nèi)存大小等。同時(shí)也定義了一組在這些設(shè)備上執(zhí)行Java程序所能使用的類庫。(1)Connectedlimiteddeviceconfiguration(有限連接設(shè)備配置,簡稱CLDC):Connectedlimiteddevice指那些運(yùn)算能力有限、電力供應(yīng)有限或者聯(lián)機(jī)速度有限的設(shè)備。CLDC規(guī)定了上述設(shè)備若執(zhí)行Java程序,則必須滿足某些特定條件(CPU、內(nèi)存、聯(lián)機(jī)速度等),這些條件就定義在CLDC中。(2)Connecteddeviceconfiguration(連接設(shè)備配置,簡稱CDC):可連接、資源相對無線設(shè)備,這類設(shè)備運(yùn)行Java程序的要求定義在CDC中。CLDC與CDC不同在于他們面向的具體設(shè)備配置不同,與個(gè)人電腦相比,CLDC針對的設(shè)備的處理器能力有限,并且存儲(chǔ)器大小往往只有128KB到512KB之間。CDC針對較好的設(shè)備,可能有32位或者64位處理器,至少擁有512K存儲(chǔ)空間。不同類型和配置的硬件會(huì)使用不同的虛擬機(jī)?;贑DC的系統(tǒng)會(huì)使用一個(gè)功能強(qiáng)勁的虛擬機(jī)CVM,而基于CLDC的系統(tǒng)使用KVM虛擬機(jī)。CDC和CLDC開發(fā)類都使用了一部分J2SE的開發(fā)類,并把這些類進(jìn)行了優(yōu)化。同時(shí)還添加了一部分針對移動(dòng)設(shè)備而開發(fā)的類。而CLDC則完全是在CDC開發(fā)類的基礎(chǔ)上進(jìn)行優(yōu)化的,沒有添加自身需要的類。CLDC與CDC的范圍:配置里面所定義的類庫除了Java標(biāo)準(zhǔn)核心類庫的子集合之外,也加入了與該類型設(shè)備特性相符的擴(kuò)充類庫。就CLDC來說,核心類庫為java.lang.*、java.io.*、java.util.*,而支持的擴(kuò)展類庫為javax.microedtion.io.*;CDC1.0和CDC1.1在核心類庫上和J2SE相差無幾。但CLDC1.0不支持浮點(diǎn)數(shù)(float、double)。CLDC1.1加強(qiáng)了CLDC1.0的功能,提供了對浮點(diǎn)運(yùn)算的支持(對float、double類的支持,增加了java.lang.Float、java.lang.Double兩種工具類)等。增加了功能,使得運(yùn)行時(shí)的最小內(nèi)存從CLDC1.0的160KB提升到了192KB。1.1.4J2ME簡表——Profile是架構(gòu)在Configuration之上的規(guī)范。每種Profile都會(huì)聲明它是基于那種Configuration的。Profile的出現(xiàn),是為了要更明確的區(qū)分出各種嵌入式設(shè)備之上的Java程序該如何開發(fā),以及它們應(yīng)該具有哪些功能。換句話說,Profile就是為了開發(fā)人員能夠根據(jù)具體設(shè)備而選擇不同的開發(fā)包,開發(fā)出和硬件結(jié)合更好的軟件。通常Java程序在各種嵌入式設(shè)備上的用戶界面該如何呈現(xiàn)就是定義在Profile里(例如,MIDP之中的LCDUI,LimitedConfigurationDeviceUserInterface)。Profile中也定義了程序該如何和用戶或設(shè)備產(chǎn)生互動(dòng)以及特定種類嵌入式設(shè)備的最小設(shè)備需求。既然Profile建立于Configuration之上,其意義就是說Profile之中所規(guī)范的配置需求不可能比Configuration低。簡表為生產(chǎn)相同電子設(shè)備的不同生產(chǎn)商提供了標(biāo)準(zhǔn)化的Java類庫。MIDP(MobileInformationDevicePofile)是CLDC實(shí)現(xiàn)的第一個(gè)簡表。有1.0和2.0兩個(gè)版本。針對移動(dòng)設(shè)備所定義。J2ME的體系結(jié)構(gòu)簡表、配置文件和虛擬機(jī)基本是三層關(guān)系,上一層總是運(yùn)行在下一層的基礎(chǔ)之上,而每個(gè)配置則分別擁有3種類型的簡表文件。1.1.5J2ME的Java企業(yè)系統(tǒng)體系結(jié)構(gòu)Java虛擬機(jī)是J2ME技術(shù)的核心,配置和簡表主要是為具體的移動(dòng)設(shè)備或其它配置的硬件提供開發(fā)所用的類或接口。配置主要針對一個(gè)大類型的設(shè)備,而簡表則為那些更為具體的設(shè)備提供說明。寫手機(jī)應(yīng)用程序,需要兩個(gè)前提:CLDC配置和MIDP簡表。一般是CLDC配置捆綁了虛擬機(jī)和一套針對開發(fā)平臺(tái)所能夠使用的Java類庫。一個(gè)MIDP簡表來為開發(fā)平臺(tái)提出使用了哪些附加的Java類,如指出使用了哪些用戶界面、輸入或數(shù)據(jù)庫類等。第二章J2ME開發(fā)環(huán)境配置目標(biāo):MIDP開發(fā)包的安裝和配置掌握MIDP開發(fā)工具的安裝了解MIDP開發(fā)工具的選擇掌握使用開發(fā)工具編寫一個(gè)簡單程序2.1一般的J2ME開發(fā)步驟如下:按需求設(shè)計(jì)移動(dòng)應(yīng)用程序使用IDE和設(shè)備模擬程序?qū)?yīng)用程序進(jìn)行編碼在真實(shí)的設(shè)備上測試和部署應(yīng)用程序2.2MIDP開發(fā)所需要的資源和工具JDKWTK2.2netbeans-4.1NetBeansMobilityPack或者JDKWTK2.2EclipseEclipseMe針對支持J2MECLDC/MIDP的移動(dòng)設(shè)備卡法工具叫J2MEWirelessToolkit,目前最新版本為2.2。該工具包提供了開發(fā)手機(jī)程序的一個(gè)模擬環(huán)境(運(yùn)行所需的庫及模擬器等)。補(bǔ)充:linux下netbeans中文亂碼問題的解決辦法進(jìn)入javahome的目錄例如:cd/usr/local/javahome/jre/lib/fonts/mkdirfallback然后從windows的目錄目錄Fonts下拷貝simsum.ttc到/usr/local/javahome/jre/lib/fonts/fallback/并改名為simsum.ttf2.2.1安裝和配置J2SESDK開發(fā)包設(shè)置兩個(gè)環(huán)境變量:JAVA_HOMEPATH2.2.2安裝和配置J2MEWirelessToolkit開發(fā)包安裝WTK之前必須已經(jīng)安裝了J2SESDK。2.3開發(fā)工具的安裝與配置Java.io標(biāo)準(zhǔn)io包,j2seio包的子集java.lang核心語言包,也是j2se語言包子集,Java.util工具包。Javax.microedition.ioCldc通用連接框架類和接口Javax.microedition.lcduilcd的用戶界面userinterface下面是游戲有關(guān)的用戶界面。Javax.microedition.Media多媒體有關(guān)的包Javax.microedition.midlet只定義了一個(gè)類,midlet父類midlet移動(dòng)信息設(shè)備上運(yùn)行的小程序,手機(jī)應(yīng)用程序都應(yīng)該繼承于midlet,Javax.microedition.rms。Midlet是抽象類只能被繼承,不能被實(shí)例化。抽象函數(shù)abstract,必須被重寫,共3個(gè),destroyApp,pauseApp和startApp構(gòu)造函數(shù)中可以初始化,startapp中也可以,這樣在暫停的時(shí)候可以釋放掉這些資源,繼續(xù)的時(shí)候重新再占用他們。退出模擬器的時(shí)候,destroyApp自動(dòng)被調(diào)用,自己也可以調(diào)用。使用notifyDestroyed();打包的時(shí)候,第一個(gè)creatPackage是普通包,下一個(gè)obfuscatedA混淆,用于加密。打包后生成兩個(gè)文件,有的手機(jī)是都拷貝過去才能運(yùn)行,有的只要jar文件就夠。Jar文件也是壓縮文件,打開后包含class文件和mf文件(配置信息)高級(jí)界面由單獨(dú)的類來支持,不是自己畫的。midlet只提供運(yùn)行平臺(tái),東西需要自己加能加到medlet上的東西,是lcdui里面tree目錄displayable。根據(jù)多態(tài)性,它可以加,則子類也可以加,canvas是畫布自己畫,低級(jí)界面。Screen里面的是高級(jí)界面,用專門的類來支持。displayable是抽象類,不能被實(shí)例化,只能實(shí)例化它的子類。Screen也是抽象類,則只能實(shí)例化它的子類??聪鄳?yīng)的包,form里面的構(gòu)造函數(shù),參數(shù)是這個(gè)form的標(biāo)題。Form如果要加到界面上去需要用Display。這個(gè)類用來管理輸入輸出設(shè)備。看相應(yīng)的display類文檔,因?yàn)槭浅橄箢愃詻]有構(gòu)造函數(shù)(不能直接實(shí)例化,但可以使用靜態(tài)函數(shù)得到,看getDisplay函數(shù))。要求參數(shù)是midlet對象,則把本身傳入。獲得當(dāng)前midlet上的顯示對象。通過Display對象dis控制本Midlet上的顯示??春瘮?shù)setCurrent()里面要求一個(gè)displayable類型的參數(shù),(其實(shí)是其子類)或者說把frm(那個(gè)displayable對象)設(shè)置為當(dāng)前界面。dis.setCurrent寫在構(gòu)造和startApp里面都可以效果不同,在本例結(jié)果是一樣的。用這個(gè)方法才能在屏幕上具體顯示出本midlet的可視化對象也就是displayable對象。command對象加入按鈕看api,command不屬于displayable類,不能直接顯示,放到界面上需要用displayable中的addCommand函數(shù),F(xiàn)orm作為displayable的子類也有這個(gè)方法。Command構(gòu)造函數(shù),有三個(gè)參數(shù),標(biāo)簽,類型(8個(gè)),優(yōu)先級(jí)。Command依賴于From,必須在其上添加才可以??偨Y(jié)Display和DisplayableDisplay的其他作用:獲取設(shè)備支持的顏色numColors()是否支持彩色isColor()背景顏色,前景色COLOR_BACKGROUND,COLOR_FOREGROUND邊框顏色,高亮邊框顏色,高亮背景,前景色Displayable的其他作用設(shè)置標(biāo)題,setTitle添加和刪除命令按鈕addCommandremoveCommand按鈕排布順序事件編程命令按鈕的事件響應(yīng)監(jiān)聽器,實(shí)現(xiàn)一個(gè)接口,就要重寫接口里面的方法(commandAction)。classCommandOpeimplementsCommandListener{//Step1:事件響應(yīng)類,實(shí)現(xiàn)CommandListener //Step2:必須重寫commandAction函數(shù),在里面寫響應(yīng)代碼 publicvoidcommandAction(Commandc,Displayabled){ d.setTitle("按鈕被選擇"); }}在displayable里有方法setCommandListener方法,用于綁定綁定frm和CommandOpe對象:frm.setCommandListener(newCommandOpe());這個(gè)CommandOPe負(fù)責(zé)響應(yīng)點(diǎn)擊frm表單所引發(fā)的事件。方法2,直接在midlet里面implementsCommandListener接口publicclassMIDlet2extendsMIDletimplementsCommandListener{ privateFormfrm=newForm("這是一個(gè)Form"); privateDisplaydis; privateCommandcmd1=newCommand("命令按鈕",Command.SCREEN,1); protectedvoidstartApp()throwsMIDletStateChangeException{ dis=Display.getDisplay(this); dis.setCurrent(frm); frm.addCommand(cmd1); //Step3:綁定frm和this frm.setCommandListener(this);//當(dāng)前類實(shí)現(xiàn)的這個(gè)接口,所以改成this } //Step2:必須重寫commandAction函數(shù),在里面寫響應(yīng)代碼 publicvoidcommandAction(Commandc,Displayabled){ d.setTitle("按鈕被選擇"); } protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{} protectedvoidpauseApp(){} }選擇框lst.append("刪除該號(hào)碼",null); //添加lst.append("編輯該號(hào)碼",null); lst.delete(數(shù)字);刪除上面的某項(xiàng)(從0開始)lst.set(0,“刪除”,null)lst.insert(0,“刪除”,null)如果選擇IMPLICIT型互斥,選擇框前沒有選擇條,而且不需要點(diǎn)擊按鈕進(jìn)行選定,直接按鍵盤中鍵即可。復(fù)選框的遍歷:publicvoidcommandAction(Commandc,Displayabled){ intsize=lst.size(); for(inti=0;i<size;i++){ if(lst.isSelected(i)){System.out.println(lst.getString(i)); } }圖片添加 Imageimg=null;//設(shè)置圖片 try{ img=Image.createImage("/img.png"); }catch(Exceptionex){}//必須對創(chuàng)建圖片進(jìn)行異常處理 lst.append("將其設(shè)為好友",img);圖片為png格式,要放置在src或者res目錄下。字體設(shè)置Fontf=Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_BOLD|Font.STYLE_ITALIC, Font.SIZE_LARGE); lst.setFont(0,f);//把第一(0)行設(shè)為以上的字體格式。(字體,風(fēng)格,大?。㏕extBox的使用構(gòu)造函數(shù)需要四個(gè)參數(shù)TextBox(標(biāo)題,初始化的文章,最大長度,信息控制[如只能輸入數(shù)字])API中有介紹文本框里面進(jìn)行編輯如刪除,要寫相應(yīng)的方法,不是自動(dòng)操作。publicclassMIDlet1extendsMIDletimplementsCommandListener{ privateTextBoxtbx=newTextBox("請您輸入短信","",255,TextField.ANY); privateDisplaydis; privateCommandcmdGetText=newCommand("獲取文本",Command.SCREEN,1); protectedvoidstartApp()throwsMIDletStateChangeException{ dis=Display.getDisplay(this); dis.setCurrent(tbx); tbx.addCommand(cmdGetText); tbx.setCommandListener(this); } publicvoidcommandAction(Commandc,Displayabled){ if(c==cmdGetText){ System.out.println("短信內(nèi)容為:"+tbx.getString()); } } protectedvoiddestroyApp(booleanarg0)throwsMIDletStateChangeException{} protectedvoidpauseApp(){}}常見方法:獲得光標(biāo)位置,getCaretPosition();獲取文本getString();插入文本insert,替換文本setString,setChar;刪除文本:delete。System.out.println("光標(biāo)位置為:"+tbx.getCaretPosition());//返回光標(biāo)位置數(shù),0位為開始tbx.insert("中國人",tbx.getCaretPosition());//在光標(biāo)處添加字符串。tbx..setString(“XXX”);//把文本框內(nèi)容重置為”XXX”;tbx.delete(tbx.getCaretPosition()-1,1);setInitialInputMode()設(shè)置輸入法。包括中文Ticker為屏幕控件做渲染Displayable里面有setTicker方法tbx.setTicker(newTicker(“歡迎學(xué)習(xí)javaMe”));提示窗口Alert:兩個(gè)構(gòu)造函數(shù),第二個(gè)包括四個(gè)參數(shù):其中第四個(gè)參數(shù)alertType類型包括5種:ALARM提醒;CONFIRMATION確認(rèn);ERROR:錯(cuò)誤INFO:通知;WARNING:警告。setTimeOunt(整數(shù))設(shè)置出現(xiàn)時(shí)間。Item元素單選,復(fù)選和下拉菜單用戶自定義item(用的少)日期操作進(jìn)度條圖片空白區(qū)域顯示字符串用戶可以輸入以上類都是Item的子類,不能單獨(dú)顯示在屏幕上,可以依附于Form類,ChoiceGroup單選,復(fù)選和下拉菜單,類型分別為Choice.EXCLUSIVE/MULTIPLE/POPUP其他和List相似,如得到里面的選項(xiàng)CustomItem用戶可以繼承這個(gè)類,可以制作用戶自定義Item,里面有抽象函數(shù),需要用戶重寫,給用戶更多的擴(kuò)展空間。DateField兩個(gè)構(gòu)造函數(shù),常用DateField(”日期操作”,DateField.DATE)后面那個(gè)參數(shù)還可以為TIME,DATE_TIME。4.Gauge進(jìn)度條幾個(gè)基本屬性:Label標(biāo)題Interactive是否可以交互修改進(jìn)度條值trueorfalseMaxValue最大值InitialValue初始值主要方法:getValue,setValueImagitem文字+圖片基本屬性,label,imagelayout布局方式,altText圖形不能裝載時(shí)的提示文字。TextField構(gòu)造函數(shù),跟textbox類似四個(gè)參數(shù):標(biāo)題,初始字符,最大長度,類型限制。StringItem屏幕上顯示一個(gè)字符串,常見屬性,label,text,appearanceMode顯示方式:item.PLAIN/BUTTON/HYPERLINK讓程序看起來可以同時(shí)做幾件事情……多線程。一個(gè)工具,軟件可以看作一個(gè)進(jìn)程,一個(gè)進(jìn)程中包括多個(gè)線程:9節(jié)方法一:繼承thread類,extendsthread重寫run函數(shù)對象調(diào)用start方法方法二:實(shí)現(xiàn)接口implementsRunnable重寫run函數(shù),定義一個(gè)thread對象,將該對象傳遞進(jìn)去再調(diào)用start方法。定義線程Threadth=newThread(實(shí)現(xiàn)的這個(gè)Runnable接口對象)th.start()區(qū)別,方法一,如果多個(gè)線程兩個(gè)線程分別使用各自變量,即,兩條線程互不影響。方法二,兩個(gè)線程會(huì)共享同名變量。初始化這兩種線程方法的時(shí)候1:newThread1().start();2:newThread(newThread2()).start();線程安全問題1:線程協(xié)助:如線程2等待線程1的結(jié)果,Thread1th=newThread1();th.start()try{th.join();//判斷線程是否完成,完了才可以繼續(xù)向下運(yùn)行。}catch(Exceptionex){}System.out.println(“結(jié)果是:”+sum);//相當(dāng)于本語句加一個(gè)執(zhí)行的條件,滿足try里面的東西才可以執(zhí)行。synchronized(this){//類似于事物,鎖定代碼不能讓其他線程搶占cpu執(zhí)行。}或者publicsynchronized函數(shù)名{//等效}使用這種方法會(huì)降低系統(tǒng)性能。String和stringBuffer區(qū)別為,后者可動(dòng)態(tài)改變字符串,而前者對字符串的操作函數(shù)要賦值給其他字符串才可以保存結(jié)果,也就是說原字符串并未改變,后者使用更方便,多線程調(diào)用可保證一致性,但是性能不如String。按鍵事件Lcdui-Canvas類中幾個(gè)方法:KeyPressed(intkeyCode);按鍵時(shí)觸發(fā)KeyReleased(intkeyCode)松開鍵時(shí)觸發(fā)KeyRepeated(intkeyCode)連續(xù)按鍵時(shí)觸發(fā)游戲開發(fā):所在包:lcdui.game提供游戲性能,提高效率五個(gè)類特有:(lcdui里面有2個(gè))Displayable,Canvas,游戲畫布GameCanwas,Layer圖層,畫布上的某個(gè)可視物體,抽象類)Sprite游戲精靈,游戲中的具體角色,子彈目標(biāo)等Tiledlayer環(huán)境角色,如地圖LayerManager管理圖層變換,顯示,刪除等一GameCanvas基本結(jié)構(gòu):ClassMyGameCanvasextendsGameCanvasimplementsRunnable{//實(shí)現(xiàn)接口用于多線程publicMyGameCanvas(){//游戲主線程Super(ture);}publicvoidrun(){//實(shí)現(xiàn)runable里面的run函數(shù)一個(gè)游戲線程}}構(gòu)造函數(shù)傳入?yún)?shù)可以控制特殊鍵是否被禁用,為true時(shí),可以通過this.getKeyStates查詢狀態(tài),this.getKeyStates&GameCanvas.LEFT_PRESSED!=0表示某鍵被按下。Canvas里用paint函數(shù)畫圖,相當(dāng)于整個(gè)界面重畫,效率低下,GameCanvas里面可以使用getGraphics直接操作畫布相當(dāng)于得到界面上的畫筆,無需重新繪制整個(gè)畫布。flushGraphics()將緩沖畫布繪制到屏幕上。Graphicsgra=this.getGraphics();gra.drawLine(12,23,100,145);gra.drawLine(0,0,this.getWidth(),this.getHeight());//對角線例子1:游戲畫布,隨機(jī)圖形,循環(huán)控制作業(yè)1:屏幕上隨機(jī)出現(xiàn)大小不等顏色不同的圓圈作業(yè)2:屏幕上出現(xiàn)同心圓。二Layer:抽象類,圖層,主要用于表示角色。兩個(gè)子類:sprite適用于運(yùn)動(dòng)角色(主角,對手,子彈等)TiledLayer適合環(huán)境角色(背景地圖)。Layer中的重要方法:getHeight()/getWidth()得到圖層的尺寸getX()/getX()得到圖層位置booleanisVisible()/voidsetVisible(Booleanvisible)是否可見/設(shè)置可見voidmove(intdx,intdy)/voidsetPosition(intx,inty)圖層移動(dòng),正數(shù)為右/下移動(dòng)/設(shè)置位置。Sprite,TiledLayer作為子類,繼承了上面這些方法。1.游戲精靈SpriteSprite(Imageimage)傳入圖片(不含動(dòng)畫)Sprite(Imageimage,w,h)傳入圖片設(shè)置幀的高寬見例G4旋轉(zhuǎn)和懸掛點(diǎn)VoiddefineReferencePixel(intx,inty)定義懸掛點(diǎn)VoidsetRefPixelPosition(intx,inty)將懸掛點(diǎn)定義到某個(gè)坐標(biāo)intgetRefPixelX得到懸掛點(diǎn)橫坐標(biāo)intgetRefPixelY得到懸掛點(diǎn)縱坐標(biāo)voidsetTransform(inttransform)旋轉(zhuǎn)待續(xù)…………轉(zhuǎn)帖:J2me多線程總結(jié)我們知道,在操作系統(tǒng)級(jí)別上軟件的運(yùn)行一般都是以進(jìn)程為單位,而在每個(gè)進(jìn)程的運(yùn)行過程中允許同時(shí)并發(fā)執(zhí)行多個(gè)不同線程,這就使得一個(gè)程序能同時(shí)執(zhí)行不同的操作。使用多線程的目的是為了最大限度地利用計(jì)算機(jī)CPU資源。JAVA程序字節(jié)碼最終是在JVM虛擬機(jī)下運(yùn)行的,同一虛擬機(jī)進(jìn)程中的不同操作都是通過多線程來運(yùn)行的。在JAVA虛擬機(jī)中,線程常用有單線程和多線程,單線程指程序執(zhí)行過程只是一個(gè)有效操作的序列,不同操作都有著明確的先后順序;而多線程允許同時(shí)進(jìn)行著不同的操作,這些不同的操作同時(shí)并發(fā)進(jìn)行著,并由CPU時(shí)鐘頻率根據(jù)不同的調(diào)度方式對他們進(jìn)行執(zhí)行調(diào)度。

在JAVA語言中提供了豐富的多線程操縱接口,提供了各類不同的線程實(shí)現(xiàn)方法供我們選擇,功能非常強(qiáng)大。在手機(jī)軟件設(shè)計(jì)中,由于同樣需要執(zhí)行網(wǎng)絡(luò)連接(基于HTTP的高級(jí)Internet協(xié)議通訊)、UI調(diào)度等待、UI顯示幻化、游戲控制等操作需要通過后臺(tái)的數(shù)據(jù)運(yùn)算或UI不斷更新等操作。因此在J2ME中,KVM虛擬機(jī)也提供了功能強(qiáng)大的多線程API,使我們同樣能在J2ME中實(shí)現(xiàn)線程的并發(fā)運(yùn)算。

在J2ME中,主要有以下三種方法實(shí)現(xiàn)多線程。

一、繼承Thread類(java.lang.Thread)

通過編寫線程類繼承Thread類并重寫Thread類中的run()方法實(shí)現(xiàn)線程,當(dāng)線程對象被運(yùn)行時(shí)候?qū)?huì)自動(dòng)執(zhí)行run方法中的實(shí)體內(nèi)容,從而開辟一個(gè)單獨(dú)的線程并運(yùn)行起來。

如:publicclassThreadSimpleextendsThread{

publicThreadSimple()

{

//constructor

}

publicvoidrun()

{

//runcode

entity

}

}

線程實(shí)例使用,直接創(chuàng)建對象并調(diào)用start()方法即可運(yùn)行線程。

newThreadSimple().start();

當(dāng)執(zhí)行start方法時(shí)候,將會(huì)自動(dòng)運(yùn)行run方法,但是執(zhí)行start方法時(shí)候只做了一件事,就是將線程轉(zhuǎn)化為可執(zhí)行狀態(tài),然后等待操作系統(tǒng)進(jìn)行調(diào)度并運(yùn)行,因此無法保證線程能立即啟動(dòng)。在JAVA中,Thread類實(shí)現(xiàn)了Runnable接口,因此run方法是通過實(shí)現(xiàn)接口Runnable中的抽象方法。

二、直接實(shí)現(xiàn)Runnable多線程接口(java.lang.Runnable)

線程接口Runnable中只有一個(gè)抽象方法run,通過實(shí)現(xiàn)Runnable接口中的方法的類即可創(chuàng)建出有多線程特征的對象,但該對象并無法使其啟動(dòng)線程,需要作為參數(shù)并借助Thread的構(gòu)造方法構(gòu)造創(chuàng)建對象并調(diào)用start方法對線程進(jìn)行啟動(dòng)。

如:publicclassRunnablSimpleimplementsRunnable{

public

RunnableSimple()

{

//constructor

}

publicvoidrun(){

//runcode

entity

}

}

實(shí)現(xiàn)類型的對象使用:

RunnableSimplers

=newRunnableSimple();

newThread(rs).start();

由此可見,以上兩種方法都是通過Thread的start來啟

溫馨提示

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

評(píng)論

0/150

提交評(píng)論