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

📄 smsmidlet.java

📁 《j2me开发精解〉(詹健飞)CD-rom附带源码。用netbeans
💻 JAVA
字号:
package com.j2medev.ch6.wma;

import java.io.IOException;
import javax.microedition.io.Connector;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.wireless.messaging.*;

public class SMSMIDlet extends MIDlet implements CommandListener,MessageListener{
    
    private Display display = null;
    //以服务器模式运行的MessageConnection
    private MessageConnection receiveConn = null;
    private boolean done = false;
    MessageReader reader = null;
    private List list = null;    //主界面
    private Displayable resume = null;
    private SendMessageUI send = null;
    public static final String[] items = {"发信息","收件箱"};
    public static final Command exitCommand = new Command("退出",Command.EXIT,1);
    public static final Command backCommand = new Command("返回",Command.BACK,2);
    
    public void startApp() {
        if(display == null){
            display = Display.getDisplay(this);
            list = new List("短消息中心",List.IMPLICIT, items, null);
            resume = list;
            list.addCommand(exitCommand);
            list.setCommandListener(this);
        }
        initMessageServer();
        display.setCurrent(resume);
    }
    
    private void initMessageServer(){
        //程序启动后,建立服务器模式的MessageConnection,监听短消息
        done = false;
        String url = "sms://:"+this.getAppProperty("port");
        System.out.println(url);
        try{
            receiveConn = (MessageConnection)Connector.open(url);
            //设置监听器,异步模式等待短信
            receiveConn.setMessageListener(this);
            reader = new MessageReader();
            new Thread(reader).start();
        }catch(IOException ex){
            this.displayError(ex.toString(), list);
        }
    }
    public void pauseApp() {
        //保存当前界面
        resume = display.getCurrent();
        release();
    }
    
    public void destroyApp(boolean unconditional) {
        release();
    }
    
    private void release(){
        //释放资源
        done = true;
        try{
            receiveConn.setMessageListener(null);
            receiveConn.close();
            receiveConn = null;
        }catch(IOException ex){
            ex.printStackTrace();
        }
    }
    
    public void setCurrent(Displayable displayable){
        display.setCurrent(displayable);
    }
    public void displayError(String message,Displayable displayable){
        Alert alert = new Alert("错误提示");
        alert.setType(AlertType.ERROR);
        alert.setString(message);
        alert.setTimeout(2000);
        display.setCurrent(alert, displayable);
    }
    public void backToMain(){
        display.setCurrent(list);
    }
    
    public void commandAction(Command cmd,Displayable displayable){
        if(cmd == exitCommand){
            destroyApp(false);
            notifyDestroyed();
        }else if(cmd == List.SELECT_COMMAND){
            String label = list.getString(list.getSelectedIndex());
            if(label.equals(items[0])){
                if(send == null)
                    send = new SendMessageUI(this);
                send.clean();
                display.setCurrent(send);
            }else if(label.equals(items[1])){
                
            }
        }else if(cmd == backCommand){
            display.setCurrent(list);
        }
    }
    //当消息到来的时候,nitifyIncomingMessage()方法被调用
    public void notifyIncomingMessage(MessageConnection messconn){
        if(messconn == receiveConn){
            reader.handleMessage();
        }
    }
    
    class MessageReader implements Runnable{
        
        private int pendingMessage = 0;
        
        public void run(){
            while(!done){
                synchronized(this){
                    //如果没有消息,则线程等待
                    if(pendingMessage == 0){
                        try{
                            wait();
                        }catch(InterruptedException ex){
                            ex.printStackTrace();
                        }
                    }
                    //读取消息,pendingMessage--
                    pendingMessage--;
                }
                //接收短信
                Message message = null;
                try{
                    message = receiveConn.receive();
                }catch(IOException ex){
                    //处理异常
                }
                if(message instanceof TextMessage){
                    TextMessage tm = (TextMessage)message;
                    String content = tm.getPayloadText();
                    String address = tm.getAddress();
                    Form form = new Form("接收到短信");
                    form.append(address+"\n");
                    form.append(content+"\n");
                    form.addCommand(backCommand);
                    form.setCommandListener(SMSMIDlet.this);
                    display.setCurrent(form);
                }else if(message instanceof BinaryMessage){
                    //这里不考虑BinaryMessage的情况
                }
            }
        }
        //又短消息进入,唤醒等待的线程读取消息
        public synchronized void handleMessage(){
            pendingMessage++;//未读取的消息数增加1
            notify();
        }
    }
}

⌨️ 快捷键说明

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