您的位置:首页 > 其它

面向对象的一些测试

2007-08-23 10:43 225 查看
作者:elle
说明:原文代表了作者的工作,请尊重作者小小的一些劳动,在转载的时候说明下原文的作者,谢谢!

面向对象的一些测试:
下面将以一个 J2ME客户端登陆界面和服务器交互的结构来说明面向对象的一些知识。
服务器端主要是一个JSP页面或一个servlet对来自客户端的请求进行判断和响应,在此对服务器端的一些内容就不多做介绍了。
J2ME客户端主要包括3个类:LoginMidlet、LoginForm、ShowForm;其中LoginMidlet为主类,LoginForm为登陆框的界面,ShowForm为LoginForm连接到服务器以后对服务器返回结果的显示界面。

接下来我给出部分代码以做说明。
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域的状态,因为有时候你并不想某个变量或对象是当前这个值,这时你只要对变量或对象做写操作即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: