一开始谈事务处理肯定就以为各式各样不同的概念,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()处理。
高级事务处理十分的简单,但是功能并不能真正的达到我们进行开发的需求。所以这个时候我们就要
借助于低级事务处理了。
俺今天不想看了。。比较累,呵呵,所以低级事务处理明天晚上研究好了。