當前位置:開發者網絡 >> 技術教程 >> JSP教程 >> J2EE/EJB/服務器 >> 內容
精彩推薦
分類最新教程
分類熱點教程
    
J2ME Polish學習心得(一)----Device Optimization
作者:未知
日期:2005-04-20
人氣:
投稿:(轉貼)
來源:未知
字體:
收藏:加入瀏覽器收藏
以下正文:
 最近在學習J2ME,但沒多久就發現很多頭痛的問題,比如不同設備的不同硬件特性,jar和jad的自動打包,Debug的困難等等。但後來我發現這個明為J2ME Plish的項目,發現他簡直就是所有J2ME編程折夢寐以求的東西,所以介紹給大家。
       J2ME Polish是德國人的一個開源項目,主頁是:http://www.j2mepolish.org/,類似於一個java開發環境的插件。第一篇先介紹一下它的設備優化功能(Device Optimization)。
比如這種經常遇到的情況,你的MIDLet需要發出些聲音,你知道支持MMAPI或MIDP2.0設備可以用如下方法:
InputStream is = getClass().getResourceAsStream("/mymid.mid");
Player player = Manager.createPlayer(is, "audio/midi");
player.realize();
player.start();
     但目前MDIP1.0的手機還很多,很多手機有自己的API,比如在Nokia UI中,可以這樣:
Sound A=new Sound(400,1000);
A.setGain(100);
A.play(1);
      如果你要是你的程序在這兩種手機上都能用,怎麼辦呢,難道維護兩套源代碼?這會非常麻煩的。所以,我就想如果Java裡有類似C++的編譯預處理就好了,可以這樣來:
#if 設備支持MMAPI 或 MIDP2.0
//do something here
#elif 設備支持Nokia UI
      //do something diference here           
#endif
然後編譯器能自動產生針對不同設備的class文件就好了。這樣解決方案可為完美,而J2ME Polish就可以幫你做到這一點,J2ME Polish在某種程度上,使Java有了預處理功能,代碼如下:
//#if polish.midp2 || polish.api.mmapi
try{
      InputStream is = getClass().getResourceAsStream("/mymid.mid");
      Player player = Manager.createPlayer(is, "audio/midi");
      player.realize();
      player.start();
      }catch(MediaException me){
//#debug error
      System.out.println("Unable to play midi" + me );
      }catch(IOException ie){
//#debug error
System.out.println("Unable to load midi" + ie );
      }
//#elif polish.api.nokia-ui
      Sound A=new Sound(400,1000);
      A.setGain(100);
      A.play(1);
//#endif
       我想上面的代碼我不用解釋你也能看懂吧?//#if之類就是J2ME Polish會識別的預處理標誌,除了」//」,它與C++中的語法完全相同(//debug 時J2ME Polish提供的debug功能,也很強大,以後解釋)。polish.midp之類的就是預定義的一些符號和變量, J2me polish定義了相當豐富的符號和變量,你可以根據設備的不同平台,API,聲音,圖像處理能力,來編寫不同的代碼。
        那目標文件是如何生成的呢? J2ME Polish使用ANT作為編譯管理工具,在build.xml中,有這麼一節:
<requirement name="Identifier" value="Nokia/Series40,Generic/midp2" />
       怎麼樣,語法很直接吧,意思就是你希望你的程序產生對應於兩種平台的結果,就是Nokia S40和一般的支持midp2的手機。J2ME Polish自帶一個數據庫,device.xml,含有各類手機類型的特性信息,所以,編譯時,前一種類型的硬件會自動使用Nokia UI的代碼,後一種則會選擇midp2的代碼。怎麼樣,是不是很好用?還有很多很好的功能,下次繼續。
相關文章: