面向对象的一些测试

作者:elle 

说明:原文代表了作者的工作,请尊重作者小小的一些劳动,在转载的时候说明下原文的作者,谢谢!

 

面向对象的一些测试:

下面将以一个 J2ME客户端登陆界面和服务器交互的结构来说明面向对象的一些知识。

服务器端主要是一个JSP页面或一个servlet对来自客户端的请求进行判断和响应,在此对服务器端的一些内容就不多做介绍了。

J2ME客户端主要包括3个类:LoginMidletLoginFormShowForm;其中LoginMidlet为主类,LoginForm为登陆框的界面,ShowFormLoginForm连接到服务器以后对服务器返回结果的显示界面。

 

接下来我给出部分代码以做说明。

LoginMidlet:

 

import javax.microedition.lcdui.Display;

import javax.microedition.midlet.MIDlet;

import javax.microedition.midlet.MIDletStateChangeException;

 

public class LoginMidlet extends MIDlet {

 

    public static LoginMidlet instance;

    public static LoginForm loginForm = null;

    private Display myDisplay = null;

   

    public LoginMidlet() {

       instance = this;

       loginForm = new LoginForm("LoginForm.");

       myDisplay = Display.getDisplay(this);

    }

 

    protected void destroyApp(boolean arg0) throws MIDletStateChangeException {

       // TODO 自动生成方法存根

 

    }

 

    protected void pauseApp() {

       // TODO 自动生成方法存根

 

    }

 

    protected void startApp() throws MIDletStateChangeException {

       myDisplay.setCurrent(loginForm);

 

    }

 

 

说明:LoginMidlet创建了本声的一个实例istance以便其他类调用主类对象;还创建了一个LoginForm对象。当程序开始运行时候由主类控制进入LoginForm,此时用户可在模拟器中看到一个登陆界面,如下图:

 

 

 

 

LoginForm:

 

public class LoginForm extends Form implements CommandListener{

   

    public TextField UserName = null;

    public TextField Location = null;

   

    private Command okCommand = new Command("OK",Command.OK,1);

    private Command exitCommand = new Command("Exit",Command.EXIT,2);

   

    public Display dis = null;

    private Alert alert = null;

    public Thread networkThread = null;

    private ShowForm showForm = null;

   

    public StringBuffer b=new StringBuffer();//用来保存从服务器返回的结果

    public LoginMidlet loginMidlet = null;

 

    public LoginForm(String s) {

       super(s);

       loginMidlet = LoginMidlet.instance;

       dis = Display.getDisplay(loginMidlet);

       showForm = new ShowForm("ShowForm.");

      

       UserName = new TextField("Your Name","",10,TextField.ANY);

        Location = new TextField("Location","",10,TextField.ANY);

      

       this.append(UserName);

       this.append(Location);

       this.addCommand(okCommand);

       this.addCommand(exitCommand);

       this.setCommandListener(this);

    }

 

    //键盘事件处理方法

    public void commandAction(Command c, Displayable d) {}

   

    //登入服务器的方法

    public void login(String UserName,String PassWord){}

 

 

说明:LoginForm是实现用户的登入功能,当用户在这个相关界面输入用户名和密码提交以后,连接服务器并把参数传给服务器。LoginForm中创建了ShowForm对象,当服务器作出响应后返回的结果在ShowForm实现的界面中显示。服务器传回的结果我是放在StringBuffer对象中。

 

 

ShowForm:

 

public class ShowForm extends Form implements CommandListener{

   

    private Command okCommand = new Command("OK",Command.OK,1);

    private Command backCommand = new Command("Exit",Command.EXIT,2);

    public Display dis = null;

    public LoginMidlet loginMidlet = null;

 

    public ShowForm(String s) {

       super(s);

       loginMidlet = LoginMidlet.instance;

       dis = Display.getDisplay(loginMidlet);

       this.addCommand(okCommand);

       this.addCommand(backCommand);

       this.setCommandListener(this);

    }

 

    public void commandAction(Command c, Displayable d) {

       if(c == okCommand){

   LoginMidlet.loginForm.UserName.delete(0,LoginMidlet.loginForm.UserName.getString().length());

           LoginMidlet.loginForm.Location.delete(0, LoginMidlet.loginForm.Location.getString().length());

           //LoginMidlet.loginForm.networkThread;

           LoginMidlet.loginForm.

           dis.setCurrent(LoginMidlet.loginForm);

          

       }else if(c == backCommand){

           dis.setCurrent(LoginMidlet.loginForm);

       }

      

    }

 

}

 

 

说明:在ShowForm界面中显示服务器返回的结果,当用户想返回到上一个界面时(这里指登入界面LoginForm),并不是再重新创建一个LoginForm对象,而是直接调用LoginMidlet中创建的LoginForm对象。就可对同一个对象进行操作了。

 

 

最后要说明的是一个我在编程过程中的一点经验:在一个类A中创建了B的对象,同时不要在类B中创建类A的对象,这样容易产生死锁;例如我在ShowForm中为了实现ok按键的功能即返回到登入界面,这时如果在 ShowForm中创建新的LoginForm对象则产生死锁。

当然你可以在其他类中创建LoginForm对象,ShowForm再去调用,就向上面我的做法。不过要注意在其他类中LoginForm域的状态,因为有时候你并不想某个变量或对象是当前这个值,这时你只要对变量或对象做写操作即可。

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值