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

📄 qqmidlet.java

📁 J2ME程序设计实例教程的源码
💻 JAVA
字号:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import java.io.*;

public class QQMIDlet extends MIDlet implements CommandListener {
    private Display display;
    private List modeList;              //QQ启动模式列表
    private ClientForm clientForm;      //客户端连接界面
    private ServerSocketConnection ssc; //
    private Alert errAlert;
    private Command cmdSelect = new Command("选择", Command.ITEM, 2);
    private Command cmdExit = new Command("退出", Command.EXIT, 1);
    private Command cmdBack = new Command("返回", Command.BACK, 3);
    
    public QQMIDlet() {
        modeList = new List("移动QQ模式:", Choice.IMPLICIT);
        modeList.append("服务器模式", null);
        modeList.append("客户端模式", null);
        modeList.setSelectCommand(cmdSelect);
        modeList.addCommand(cmdExit);
        modeList.setCommandListener(this);
    }
    
    public void startApp() {
        if(display == null) {
            display = Display.getDisplay(this);
            display.setCurrent(modeList);
        }
    }
    
    public void pauseApp() {
        //
    }
    
    public void destroyApp(boolean unconditional) {
        //
    }
    
    public void commandAction(Command cmd, Displayable d) {
        if(cmd == cmdExit) {    //退出移动QQ
            notifyDestroyed();
        }
        else if(cmd == cmdSelect) { //选择QQ启动模式
            int index = modeList.getSelectedIndex();
            switch(index) {
                case 0: {   //服务器模式
                    createService(); //创建服务,等等接收客户端连接
                    break;
                }
                case 1: {   //客户端模式
                    showClientForm();   //显示地址输入窗口
                    break;
                }
            }
        }
        else if(cmd == cmdBack) {   //处理服务等待界面的返回按钮
            if(ssc != null) {
                try {
                    ssc.close();
                    ssc = null;
                }
                catch(IOException ioe) {
                    //
                }
            }
            display.setCurrent(modeList);
        }
    }
    
    //创建服务
    private void createService() {
        Thread t = new Thread(new Runnable() {
            public void run() {
                try {
                    //创建服务器端ServerSocketConnection对象
                    ssc = (ServerSocketConnection)Connector.open("socket://:2000");
                    
                    /*
                     ssc对象调用acceptAndOpen方法监听端口,等待接收客户端的套接字连接,
                     该方法将阻塞当前线程。当有客户端套接字连接时,acceptAndOpen方法将
                     返回一个服务器端的套接字连接对象,程序向下执行。
                    */
                    SocketConnection sconn = (SocketConnection)ssc.acceptAndOpen();
                    ssc = null;
                    
                    //创建并显示聊天交互界面
                    QQForm qqForm = new QQForm("服务器端", sconn, QQMIDlet.this);
                    display.setCurrent(qqForm);
                }
                catch(IOException ioe) {
                    System.out.println(ioe.toString());
                }
            }
        });
        t.start();  //启动监听线程
        
        //创建并显示监听时的显示界面
        Form form = new Form("服务器");
        form.append(new StringItem("等待客户端连接", "......"));
        form.addCommand(cmdBack);
        form.setCommandListener(this);
        display.setCurrent(form);
    }
    
    //显示客户端模式的显示界面
    public void showClientForm() {
        if(clientForm == null) {
            clientForm = new ClientForm("客户端", this);
        }
        display.setCurrent(clientForm);
    }
    
    //返回到QQ启动模式列表
    public void backToModeList() {
        display.setCurrent(modeList);
    }
    
    public void showError(String msg) {
        if(errAlert == null) {
            errAlert = new Alert("错误!", "", null, AlertType.ERROR);
            errAlert.setTimeout(Alert.FOREVER);
        }
        errAlert.setString(msg);
        display.setCurrent(errAlert);
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -