J2ME學習筆記(五)

來源:互聯網
上載者:User

    一開始談交易處理肯定就以為各式各樣不同的概念,java基類的繼承等東西。所以感覺很是枯燥。以

前學java的時候一談交易處理我就頭痛。呵呵。
    呵呵,開始研究一下MIDlet的交易處理咯。其實以前也沒有寫過Applet,但是Servlet倒是寫得多,

畢竟MVC裡面servlet所佔地位也算重要。任何一個servlet都必須要繼承javax.servlet.http.HttpServle

t類,其實作為一個MIDlet而言也是一個概念,所有的MIDlet都必須繼承javax.microedition.midlet.MID

let。說白了也就是繼承了startApp(),pauseApp(),destoryApp()這三個方法。
    當一個MIDlet成功開始啟動並執行以後也就開始了它的生命週期,這個生命週期完全有JPM控制。MIDlet

狀態轉變發生意外的時候便會拋出MIDletStateChangeException。
    整個MIDP規格中,交易處理分為進階交易處理以及低級交易處理。低級交易處理根據不同的手持功能

會有不同的類庫支援,而進階交易處理則無此限制。也就是說,如果我們做的MIDlet想要在不同的機器上

都能運行我們就不能調用低級交易處理中的方法,而只能使用進階交易處理中的方法。
    整個MIDP中,交易處理是由 事務<->處理方法 的一個組合形成的。
    MIDP所有具有顯示能力的元件都繼承於Displayable抽象類別,它又衍生出了Screen(處理進階事務處

理)與Canvas(處理低級交易處理)。MIDP中進階交易處理有兩個介面,分別是CommandListener以及Ite

mStateListener。CommandListener介面經常與javax.microedition.lcdui中的Command類一起使用。可以

看如下例子:
/**
 * @author You Li
 *
 * CopyRight (C) 2005 
 */
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class HLEventMIDlet extends MIDlet implements CommandListener{
 private Command exitCommand;
 private Command info1Command;
 private Command info2Command;
 private Display display;
 public HLEventMIDlet(){
  display = Display.getDisplay(this);
  exitCommand = new Command("退出", Command.SCREEN,1);//後面數字越小,優先順序別

越高
  info1Command = new Command("菜單1", Command.SCREEN,2);
  info2Command = new Command("菜單2", Command.SCREEN,2);
 }
 public void startApp(){
  TextBox t = new TextBox("Hello", "測試一下^_^",256, 0);
  t.setCommandListener(this);
  t.addCommand(exitCommand);
  t.addCommand(info2Command);
  t.addCommand(info1Command);
  display.setCurrent(t);
 }
 public void pauseApp(){
 }
 public void destroyApp(boolean unconditional){
 }
 public void commandAction(Command c, Displayable s)
 {
  if (c == exitCommand)  {
   notifyDestroyed();
  }else if (c == info1Command){
   notifyDestroyed();
  }
 }
}
    運行以後就會發現已經有了一個可以供選擇的一個簡單菜單了!^_^Command一共定義了8個命令,優

先層級如下從高到低:Command.BACK
  Command.CANCEL  Command.EXIT  Command.HELP  Command.ITEM  Command.OK  Command.SCREEN 

Command.STOP 。呵呵,我覺得這麼說都沒有什麼用,寫一點點代碼就都清楚了。。^_^

   CommandListener採用了Unicast模式,所以同一時間那隻能相應一個交易處理方法。

   然後欣賞哈子ItemStateListener介面好了。同CommadnListener一樣,它也採用了Unicast模式。
   搞個列子先:
/**
 * @author You Li
 *
 * CopyRight (C) 2005 
 */
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class TFEventMIDlet extends MIDlet implements ItemStateListener {

 /**
  *
  */
 private Display display;
 public TFEventMIDlet(){
  display = Display.getDisplay(this);
 }
 public void startApp()
 {
  Form f = new Form("Form") ;
  TextField tf = new
  TextField("Input","Origin",25,TextField.ANY) ;
  f.append(tf) ;
  f.setItemStateListener(this) ;
  display.setCurrent(f) ;
 }
 public void pauseApp(){
 }
 public void destroyApp(boolean unconditional){
 }
 public void itemStateChanged(Item item){
  TextField tmp = (TextField) item ;
  tmp.setString("Changed") ;
 }

}
   關於這兩個介面的具體使用方法我想也沒有必須都寫出來,根據介面所需要繼承下來的類一看我想也

都差不多了。。呵呵,命名還是很規範的。

  

根據MIDP的規範,如果CommandListener和ItemStateListener同時處理,itemStateChanged()優先於comm

andAction()處理。

   進階交易處理十分的簡單,但是功能並不能真正的達到我們進行開發的需求。所以這個時候我們就要

藉助於低級交易處理了。

   俺今天不想看了。。比較累,呵呵,所以低級交易處理明天晚上研究好了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.