J2ME学习笔记(五)

类别:Java 点击:0 评论:0 推荐:

    一开始谈事务处理肯定就以为各式各样不同的概念,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()处理。

   高级事务处理十分的简单,但是功能并不能真正的达到我们进行开发的需求。所以这个时候我们就要

借助于低级事务处理了。

   俺今天不想看了。。比较累,呵呵,所以低级事务处理明天晚上研究好了。

本文地址:http://com.8s8s.com/it/it11924.htm