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

介紹MIDP的屬性問題

編輯:J2ME
 本文目的是說明MIDP中的屬性問題,主要涉及到jad和MANIFEST.MF文件的一些概念。事實上很多人並不清楚這方面的細節。所以你應該仔細讀讀這篇文章.

    通常MIDP的應用程序是以.jar文件和.jad文件發布的。jar文件就是我們所說的jar包,jad文件的全名是java application descriptor。在jad文件中包含著Application Management Software用來管理MIDlets的生命周期的信息,當然也包括很多重要的屬性。他們是成對出現的例如:MIDlet-Name:myjava。你可以通過調用getAppProperty("MIDlet-Name")來得到String類型的myJava,這是非常方便的,如果你想讓你的MIDlet去聯網那麼你可以定義一個name為SERVER_URL,把它的值定義為http://yourip:port/myservlet,這樣如果你想去連接其他地址的話只需要修改jad文件了,不需要重新編譯。因此我們要清楚一點在jad文件裡面放置一些MIDlet初始化需要的值是比較可取的。

      在jar包裡面包括一個目錄META-INFO裡面有個文件是MANIFEST.MF。它是用來描述JAR文件的,也包含一些其它的信息,你可能發現了,在MANIFEST.MF和JAD文件中的一些值是相同的。那麼這就存在著一個規則,AMS如何決定去讀取哪個值呢?答案是這樣的。

  1. 如果MIDlets的jar包是signed的,那麼AMS要去察看它的數字簽名,如果是有效的那麼它會首先去讀取MANIFEST.MF的內容,然後讀取jad文件中相同的內容,如果匹配的話那麼它會安裝這個jar包,如果不匹配的話就會拒絕安裝。如果他發現數字簽名無效的話直接就會拒絕安裝。
  2. 如果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 v0 = lookup key in manifest
  String v1 = lookup key in descriptor

  if ( v0 != null && v1 != null )
   // found in both; must be the same value
   assert( v0.compareTo( v1 ) == 0 );

  value = ( v1 != null )? v1 : v0;
 else // untrusted
  value = lookup key in descriptor

  if value == null
   value = lookup key in manifest

 return value

下面簡單介紹一下MIDP2.0中定義的一些重要的參數,在MIDP2.0中定義了18個值。其中在MANIFEST.MF和jad中都必須定義的有六個,他們是:
MIDlet-Name
MIDlet-Version
MIDlet-Vendor
MicroEdition-Profile
MicroEdition-Configuration 
MIDlet-n 
    由於一個MIDlet suite裡面可以有多個MIDlet的,因此你要說明他們比如MIDlet-1,MIDlet-2.....MIDlet-n,這一點非常的重要,在部署jar和jad文件到手機的時候一定要確保MIDlet-Name的正確,它的值是你的jar包的名字!否則不會安裝成功的。還有兩個值是jad文件中不許有的他們是MIDlet-Jar-URL ,
MIDlet-Jar-Size 其中應該注意的是MIDlet-Jar-URL,如果你要是通過OTA下載的話,那麼你不許讓他指向你jar包的絕對地址,例如http://myip:port/app/myapp.jar

      關於一個MIDlet suite裡面有多個MIDlet的情況我寫了個簡單的代碼測試了一下,如果還有疑問的話你可以運行一下下面的程序:
import Javax.microedition.lcdui.Display;
import Javax.microedition.lcdui.Form;
import Javax.microedition.midlet.MIDlet;
import Javax.microedition.midlet.MIDletStateChangeException;

public class MIDlet1 extends MIDlet
{

    private Display display;
    
   
    protected void startApp() throws MIDletStateChangeException
    {
        
        display = Display.getDisplay(this);
        display.setCurrent(new Form("1"));
    }

     protected void pauseApp()
    {
    }

    protected void destroyApp(boolean arg0) throws MIDletStateChangeException
    {
    }

}
import Javax.microedition.lcdui.Display;
import Javax.microedition.lcdui.Form;
import Javax.microedition.midlet.MIDlet;
import Javax.microedition.midlet.MIDletStateChangeException;

public class MIDlet2 extends MIDlet
{

    private Display display;
    
  
    protected void startApp() throws MIDletStateChangeException
    {
        display = Display.getDisplay(this);
        display.setCurrent(new Form("2"));
    }

   
    protected void pauseApp()
    {
       

    }

    protected void destroyApp(boolean arg0) throws MIDletStateChangeException
    {
         }

}
import Javax.microedition.lcdui.Display;
import Javax.microedition.lcdui.Form;
import Javax.microedition.midlet.MIDlet;
import Javax.microedition.midlet.MIDletStateChangeException;

public class MIDlet3 extends MIDlet
{

    private Display display;
    
   
    protected void startApp() throws MIDletStateChangeException
    {
        display = Display.getDisplay(this);
        display.setCurrent(new Form("3"));
    }

  
    protected void pauseApp()
    {
    }

    protected void destroyApp(boolean arg0) throws MIDletStateChangeException
    {
    }

}
JAD文件的內容如下:
MIDlet-3: MIDlet3,,MIDlet3
MIDlet-2: MIDlet1,,MIDlet1
MIDlet-1: MIDlet2,,MIDlet2
MIDlet-Jar-URL: MIDlets.jar
MicroEdition-Configuration: CLDC-1.0
MIDlet-Version: 1.0.0
MIDlet-Name: MIDlets
MIDlet-Vendor: Midlet Suite Vendor
MicroEdition-Profile: MIDP-1.0
    把上面的三個.Java文件打包成MIDlets.jar文件,然後雙擊.jad文件。程序就可以運行起來了,我在wtk2.1下運行沒有任何問題!

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