⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 userlist.java

📁 一个手机上的IM 即时通信工具完整代码 J2ME项目
💻 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 + -