📄 userlist.java
字号:
package myim.ui;
import java.util.*;
import myim.midlet.*;
import myim.logic.*;
import javax.microedition.lcdui.*;
/**
* 用户列表界面
* 主要功能:
* 1、在界面上显示用户信息
* 2、每隔60秒更新在线用户数据
* 3、每隔60秒取得其他用户发送过来的数据
*/
public class UserList extends List implements CommandListener, HttpListener,
Runnable {
/**显示控制对象*/
private Display display;
/**退出按钮*/
private Command cmdExit;
/**发送信息*/
private Command cmdSend;
/**阅读信息*/
private Command cmdRead;
/**信息提示框*/
private Alert alert;
/**用户id*/
private String id;
/**线程是否运行,true代表运行,false代表不运行*/
private boolean isRunning = true;
/**时间间隔,固定为60秒*/
private final int INTERVAL_TIME = 60000;
/**存储获得的未显示信息*/
private Hashtable htMsg;
/**
* 默认构造方法
*/
public UserList(Display display, String[] userName, String id) {
super("用户列表", List.IMPLICIT, userName, null);
this.display = display;
this.id = id;
//初始化界面
initUI();
}
/**
* 初始化界面
*/
private void initUI() {
//初始化按钮
cmdExit = new Command("退出", Command.EXIT, 1);
cmdSend = new Command("发送信息", Command.SCREEN, 1);
cmdRead = new Command("阅读信息", Command.SCREEN, 1);
//添加按钮
addCommand(cmdExit);
addCommand(cmdSend);
addCommand(cmdRead);
//注册事件监听器
setCommandListener(this);
//初始化信息提示框
alert = new Alert("MyIM", "", null, AlertType.INFO);
}
/**
* 发送在线用户增量更新数据
* @param id String 用户标识id
*/
private void sendOnlineUserIncrement(String id) {
try {
//转换用户id
byte[] idData = id.getBytes("utf-8");
//构造协议数据
byte[] data = new byte[1 + idData.length];
data[0] = RequestInterface.QUERY_ONLINE_INCREMENT_UPDATE;
//拷贝数据
System.arraycopy(idData, 0, data, 1, data.length);
//发送数据
new HttpThread(this, data);
} catch (Exception e) {
System.out.println("sendQueryOnLineUser:" + e);
}
}
/**
* 从服务器获得其他用户发送的数据
* @param id 用户标识id
*/
private void sendGetInfoFromUser(String id) {
try {
byte[] idData = id.getBytes("utf-8");
byte[] data = new byte[1 + idData.length];
//初始化数据
data[0] = RequestInterface.GET_INFOR_FORM_OTHER_USER;
System.arraycopy(idData, 0, data, 1, idData.length);
//发送
new HttpThread(this, data);
} catch (Exception e) {
doError("异常数据!");
}
}
public void commandAction(Command command, Displayable displayable) {
//退出按钮
if (cmdExit == command) {
MyIMMIDlet.quitApp();
}
//发送信息按钮
if (cmdSend == command) {
}
//阅读信息按钮
if (cmdRead == command) {
int index = this.getSelectedIndex();
String userName = this.getString(index);
String msg[] = getMsgByName(userName);
if (msg.length > 0) {
display.setCurrent(new ReadInfoForm(display, userName, msg, this,
id));
}
}
}
/**
* 根据用户名获得服务器反馈信息
* @param userName 用户名
* @return String[] 服务器反馈信息
*/
private String[] getMsgByName(String userName) {
return null;
}
/**
* 处理服务器反馈数据
* @param data byte[] 服务器反馈信息
*/
public void getResponse(byte[] data) {
}
/**
* 处理错误信息
* @param errMsg String 错误信息
*/
public void doError(String errMsg) {
alert.setString(errMsg);
//显示提示
display.setCurrent(alert, this);
}
/**
* 线程方法
* 功能:轮询服务器,获得在线用户用户信息以及服务器反馈
*/
public void run() {
try {
while (isRunning) {
//暂停
Thread.sleep(INTERVAL_TIME / 2);
//发送用户状态更新数据
sendOnlineUserIncrement(id);
//暂停
Thread.sleep(INTERVAL_TIME / 2);
//发送获得其他用户发送的信息指令
sendGetInfoFromUser(id);
}
} catch (Exception e) {
doError("发生未知错误!");
e.printStackTrace();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -