熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

詳細說明 MIDP 中的屬性問題

2013-11-15 11:35:34  來源: JSP教程 

  本文目的是說明MIDP中的屬性問題主要涉及到jad和MANIFESTMF文件的一些概念事實上很多人並不清楚這方面的細節所以你應該仔細讀讀這篇文章
  
  通常MIDP的應用程序是以jar文件和jad文件發布的jar文件就是我們所說的jar包jad文件的全名是java application descriptor在jad文件中包含著Application Management Software用來管理MIDlets的生命周期的信息當然也包括很多重要的屬性他們是成對出現的例如MIDletNamemyjava你可以通過調用getAppProperty(MIDletName)來得到String類型的myjava這是非常方便的如果你想讓你的MIDlet去聯網那麼你可以定義一個name為SERVER_URL把它的值定義//yourip:port/myservlet這樣如果你想去連接其他地址的話只需要修改jad文件了不需要重新編譯因此我們要清楚一點在jad文件裡面放置一些MIDlet初始化需要的值是比較可取的
  
  在jar包裡面包括一個目錄METAINFO裡面有個文件是MANIFESTMF它是用來描述JAR文件的也包含一些其它的信息你可能發現了在MANIFESTMF和JAD文件中的一些值是相同的那麼這就存在著一個規則AMS如何決定去讀取哪個值呢?答案是這樣的
  
  如果MIDlets的jar包是signed的那麼AMS要去察看它的數字簽名如果是有效的那麼它會首先去讀取MANIFESTMF的內容然後讀取jad文件中相同的內容如果匹配的話那麼它會安裝這個jar包如果不匹配的話就會拒絕安裝如果他發現數字簽名無效的話直接就會拒絕安裝
  
  如果MDIlets的jar包是unsigned的話那麼AMS就把它認為是非信任的他去讀取jad文件的屬性如果發現沒有的話它去讀取MANIFEST的內容也就是說如果jad和MANIFEST裡面都有的屬性AMS只會去讀取jad中的
  
  下面這個邏輯看上去是比較清楚的
   given : String key // attribute name
   return : String value
   throws : NullPointerException if key is null
  
   if trusted
   String v = lookup key in manifest
   String v = lookup key in descriptor
  
   if ( v != null && v != null )
    // found in both; must be the same value
    assert( pareTo( v ) == );
  
   value = ( v != null )? v : v;
   else // untrusted
   value = lookup key in descriptor
  
   if value == null
    value = lookup key in manifest
  
   return value
  
  下面簡單介紹一下MIDP中定義的一些重要的參數在MIDP中定義了個值其中在MANIFESTMF和jad中都必須定義的有六個他們是
  MIDletName
  MIDletVersion
  MIDletVendor
  MicroEditionProfile
  MicroEditionConfiguration 
  MIDletn
  由於一個MIDlet suite裡面可以有多個MIDlet的因此你要說明他們比如MIDletMIDletMIDletn這一點非常的重要在部署jar和jad文件到手機的時候一定要確保MIDletName的正確它的值是你的jar包的名字!否則不會安裝成功的還有兩個值是jad文件中不許有的他們是MIDletJarURL
  
  MIDletJarSize 其中應該注意的是MIDletJarURL如果你要是通過OTA下載的話那麼你不許讓他指向你jar包的絕對地址例如
  
  關於一個MIDlet suite裡面有多個MIDlet的情況我寫了個簡單的代碼測試了一下如果還有疑問的話你可以運行一下下面的程序
  import javaxmicroeditionlcduiDisplay;
  import javaxmicroeditionlcduiForm;
  import javaxmicroeditionmidletMIDlet;
  import javaxmicroeditionmidletMIDletStateChangeException;
  /*
   * Created on
   *
   * TODO To change the template for this generated file go to
   * Window Preferences Java Code Style Code Templates
   */
  
  /**
   * @author EC
   *
   * TODO To change the template for this generated type comment go to
   * Window Preferences Java Code Style Code Templates
   */
  public class MIDlet extends MIDlet
  {
  
    private Display display;
    
    /* (nonJavadoc)
     * @see javaxmicroeditionmidletMIDlet#startApp()
     */
    protected void startApp() throws MIDletStateChangeException
    {
      // TODO Autogenerated method stub
      display = DisplaygetDisplay(this);
      displaysetCurrent(new Form());
    }
  
    /* (nonJavadoc)
     * @see javaxmicroeditionmidletMIDlet#pauseApp()
     */
    protected void pauseApp()
    {
      // TODO Autogenerated method stub
  
    }
  
    /* (nonJavadoc)
     * @see javaxmicroeditionmidletMIDlet#destroyApp(boolean)
     */
    protected void destroyApp(boolean arg) throws MIDletStateChangeException
    {
      // TODO Autogenerated method stub
  
    }
  
  }
  import javaxmicroeditionlcduiDisplay;
  import javaxmicroeditionlcduiForm;
  import javaxmicroeditionmidletMIDlet;
  import javaxmicroeditionmidletMIDletStateChangeException;
  /*
   * Created on
   *
   * TODO To change the template for this generated file go to
   * Window Preferences Java Code Style Code Templates
   */
  
  /**
   * @author EC
   *
   * TODO To change the template for this generated type comment go to
   * Window Preferences Java Code Style Code Templates
   */
  public class MIDlet extends MIDlet
  {
  
    private Display display;
    
    /* (nonJavadoc)
     * @see javaxmicroeditionmidletMIDlet#startApp()
     */
    protected void startApp() throws MIDletStateChangeException
    {
      // TODO Autogenerated method stub
      display = DisplaygetDisplay(this);
      displaysetCurrent(new Form());
    }
  
    /* (nonJavadoc)
     * @see javaxmicroeditionmidletMIDlet#pauseApp()
     */
    protected void pauseApp()
    {
      // TODO Autogenerated method stub
  
    }
  
    /* (nonJavadoc)
     * @see javaxmicroeditionmidletMIDlet#destroyApp(boolean)
     */
    protected void destroyApp(boolean arg) throws MIDletStateChangeException
    {
      // TODO Autogenerated method stub
  
    }
  
  }
  import javaxmicroeditionlcduiDisplay;
  import javaxmicroeditionlcduiForm;
  import javaxmicroeditionmidletMIDlet;
  import javaxmicroeditionmidletMIDletStateChangeException;
  /*
   * Created on
   *
   * TODO To change the template for this generated file go to
   * Window Preferences Java Code Style Code Templates
   */
  
  /**
   * @author EC
   *
   * TODO To change the template for this generated type comment go to
   * Window Preferences Java Code Style Code Templates
   */
  public class MIDlet extends MIDlet
  {
  
    private Display display;
    
    /* (nonJavadoc)
     * @see javaxmicroeditionmidletMIDlet#startApp()
     */
    protected void startApp() throws MIDletStateChangeException
    {
      // TODO Autogenerated method stub
      display = DisplaygetDisplay(this);
      displaysetCurrent(new Form());
    }
  
    /* (nonJavadoc)
     * @see javaxmicroeditionmidletMIDlet#pauseApp()
     */
    protected void pauseApp()
    {
      // TODO Autogenerated method stub
  
    }
  
    /* (nonJavadoc)
     * @see javaxmicroeditionmidletMIDlet#destroyApp(boolean)
     */
    protected void destroyApp(boolean arg) throws MIDletStateChangeException
    {
      // TODO Autogenerated method stub
  
    }
  
  }
  JAD文件的內容如下
  MIDlet: MIDletMIDlet
  MIDlet: MIDletMIDlet
  MIDlet: MIDletMIDlet
  MIDletJarURL:
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19259.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.