程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> J2ME開發的體會

J2ME開發的體會

編輯:關於JAVA

J2ME方面開發的資料,確實是少之又少,一般給新手推薦的都是王森先生的《PDA與手機開發入門》一書,然而該書其實並不適合新人閱讀,該書的前幾章花了很大篇幅來講解命令行調試J2ME程序的方法和很多要點,其實這些東西,作為一個初級的J2ME開發者來說,完全沒有必要學習和掌握,反而只會給自己平添很多負擔。現在做J2ME開發,大多都有了IDE(集成開發環境),比如JB,Eclipse什麼的,就算是用最簡單的WTK,也不需要進行path的配置等操作,所以初學者完全可以跳過這些內容,直接上手。我的認為,做程序開發,重在實踐經驗,而不是理論研究,因此,新人完全可以直接從J2ME的程序流程入手,直接進入,而不需要去了解太多基本概念,比如什麼是API,什麼是MIDP,什麼是JDK等等。這些東西我到現在也不是很清楚,但並不影響我進行開發,我是講究實用主義的,因此,本文的基調就在於講述一些實用的開發方法。另外首先要聲明:本文中的一切開發調試都是在WTK環境下進行的,請讀者注意。

一.學習J2ME需要的基礎知識J2ME本身是Java語言的一部分,因此,對Java語言有一定了解是必要的,而Java語言本身是面向對象編程的一種語言,因此,對類與對象的概念要有必要的了解,而這些內容在本文中就不進行介紹了。另外,本文行文中對API的介紹很簡略,因此,讀者應該自己多查閱API中的相關內容。

二.J2ME開發環境簡介J2ME的開發環境如前文所述,目前主要有JB,Eclipse,WTK三種方式,其中前面兩者都是集成開發環境,在編程上比較方便,有智能聯想等功能,而WTK相對只提供了手動編譯和打包,並且沒有Debug功能。但WTK不需要多余的配置,對各種模擬器可以說是即插即用,而且在WTK下的程序目錄簡潔明了,方便查詢。這幾種開發環境各有長短處,所以大家可以自己選擇,不過對新手來說,還是建議采用WTK,因為剛接觸J2ME開發,與其把時間花在配置上,還不如花在編程上。

三.J2ME程序流程我的感覺,每門語言都有自己的固定格式,就跟寫文章的幾要素一樣,總有開頭,結尾等等。而了解一門語言的格式,是學習這門語言最先要掌握的內容。如果把程序流程比做是一個管道工程的話,那麼每門語言裡都有一個管道的入口,在J2ME裡,這個入口就是MIDlet類,這個類一般也稱為J2ME的主類,每個程序,都有一個或多個固定的主類,在這裡,我們只談一般的情況,即只有一個MIDlet主類的情況,大家看API即可知道,MIDlet類有幾個固定方法,startApp(),pauseApp(),destroyApp(),這些方法就像是管道工程(以下的講述裡,我都把編程比作是管道工程)中的幾個關鍵閥門,一個J2ME程序啟動後,便先經歷MIDlet的構造方法,然後進入startApp()方法,當有特殊情況掛起的時候,便會進入pauseApp方法,當程序結束時,便經由destroyApp方法退出。一個J2ME程序可以沒有其他類,但不能沒有MIDlet類,只要有一個完整的主類,便是一個完整的J2ME程序。比如非常精典的"HelloWorld",便只有一個MIDlet。

我覺得,J2ME實際上是一個很標准的順序流程語言,J2ME中沒有真正的多線程,很多情況下,一個J2ME程序的運行,我們都可以對他的流程進行完全的跟蹤。這在調試方面是非常方便的。在這裡還要解釋一點,J2ME程序中,屏幕對象是一個比較重要的對象,你的所有操作,你所要表達的意思,都需要在屏幕上描繪出來,因此,對屏幕的操作也是最基本和最重要的一個操作,因此,J2ME程序的操作其實就是對Display和Display上的Displayable(包括Form,TextBox,List,Canvas等等)對象進行控制。也就是說,讓程序在合適的時候,把需要的Displayable顯示在屏幕上。使用的方法,即是Display.setCurrent()方法。

在屏幕對象的操作上,我要解釋一下,J2ME默認的屏幕只有一個,即是當前屏幕,所有操作都是對當前屏幕進行操作,因此,當你在主類中將一個Canvas對象設置為當前屏幕後,則主類已經處於脫屏狀態,脫屏狀態下的對象無法進行直接操作。這一點需要注意。所有外界的操作均只能作用於當前屏幕上顯示的Displayable對象,無論是Form,List,或者是Canvas。此時對脫屏類的操作只能通過靜態方法或者是該類的一個實例來進行。J2ME的游戲中最簡單的一種游戲流程是這樣,即一個主類和一個Canvas類,主類入口處定義一個Canvas對象,並且此Canvas對象繼承一個Runnable接口,再定義一個基於此對象的線程,然後將此Canvas對象設為當前屏幕對象,並啟動線程,即用線程的start()方法,啟動線程後,Canvas裡的run方法便開始運行,而run方法通常要用repaint()方法來刷屏,因此流程就是按paint()->run->paint().....這樣的過程往復,其中如果還有鍵盤輸入,則keyPressed()等方法就穿插在中間。基本上J2ME的程序就是按這樣的流程來走,因此在開發和調試中只要對這個流程進行必要的跟蹤就可以了。

四.J2ME中常用的類J2ME中常用的類有MIDlet,Form,List,Canvas,String,Command,Graphics等等。其中Graphics作為游戲開發中的核心類,自然需要熟練的掌握。在Graphics中如下的重要方法需要掌握:setColor(int 設置的顏色)setFont(Font 設置的字體)drawRect(int 起點坐標x,int 起點坐標y,int 寬,int 高)fillRect(int 起點坐標x,int 起點坐標y,int 寬,int 高)drawImage(Image 要畫的圖形對象,int 起點坐標x,int起點坐標y,int 基點類型)drawLine(int 起點坐標x,int起點坐標y,int 終點坐標x,int 終點坐標y)drawString(String 要寫的字符串, int 起點坐標x,int起點坐標y,int 基點類型)在這裡要說明一下什麼是基點類型,基點是標志你設置的起點坐標在整個要繪制的對象(不論是圖像還是文字)中的位置,如左上,右下,正中間等等。常用的值有0或20:左上,17:正中間,24:右上,36:左下,40:右下。除此之外,還有幾個重要方法addCommand,removeCommand,這兩個方法是對Command的添加和取消的操作,很常用。而談到Command,自然就要涉及到commandListener這個接口,按鈕的監聽需要通過這個接口來進行,也就是要重載接口中的 commandAction()方法。不過在使用這個接口的時候,不要忘了對當前的對象設置setCommandListener(this)。另外,對於String類,substring方法應該掌握而對於Form這些高級控件,可用方法不多,看看API即可。

五.J2ME中的線程J2ME中的線程是Thread類,而實現線程有兩種方法,一種是繼承Runnable接口,一種是Timer和TimerTask。而不管是哪種線程,其本質都是在運行其中的run方法。在這裡要注意,Runnable接口的run方法和TimerTask的run方法又是不同的,因為他們的運行機制不同。Runnable接口是靠線程的休眠或等待來實現線程的刷新,而TimerTask是按照事先給定的時間間隔來自動刷新。對Runnable接口,一旦run方法結束後,則線程就結束了,因此Runnable線程裡的run方法要寫成循環方式,一般是while(isRunning)的形式,要結束的時候把isRunning設為false,而TimerTask則不用,因為他是定時刷新。但這樣也有個問題,就是如果TimerTask的run方法寫得過長,執行時間超過了設置的線程間隔時間,就會出現線程重疊的情況。線程重疊會造成諸如游戲速度突然加快等Bug。在Runnable接口定義的線程裡,有兩種等待方法,一種是wait,一種是sleep,如果使用wait方法,則要注意在線程run方法裡,用synchonized標志符將該線程設置為同步鎖定狀態,否則會出現java.lang.IllegalMonitorStateException異常,大致意思是線程當前請求的監視器對象不能響應,因為被別的線程占用了。線程在J2ME裡非常重要,一切動態效果(當然這是游戲的前提)都是通過線程來操作,因此,對線程的控制是值得研究的一個問題。如何優化代碼,使線程能夠在足夠短的間隔時間內正常刷新,換言之,這就是大家討論的FPS問題。程序優化做得好,則線程間隔時間可以足夠短,使得FPS可以足夠高,游戲的流暢度當然就越高。

六.J2ME開發中的好習慣

1.多寫注釋,完備的注釋不管是對你自己,還是對別人,都是很有好處的,在調試中也會起很大的幫助。

2.在重要流程的各個環節設置一些監聽點,其實很簡單,就是用symstem.out.println()來輸出一些標志符號就可以了,這樣可以監聽你的程序在運行的時候,走到哪一步。

3.不要寫太多的類,盡量整合資源,不用的變量或者方法,盡量去掉。

4.熟練掌握各種常見的異常,不要太依賴於問別人和翻書,這些應該是一個合格的程序員應該熟練於心的東西。

5.對不熟悉的類,應該多寫小代碼來實驗其用法,別人講的永遠不如自己研究出來的結果牢靠。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved