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

📄 receiver.java

📁 J2ME程序设计实例教程的源码
💻 JAVA
字号:
package tom.jiafei;
import javax.wireless.messaging.MessageConnection;
import javax.wireless.messaging.Message;
import javax.wireless.messaging.TextMessage;
import javax.microedition.io.Connector;
import java.io.IOException;

/**
 * 该类提供了接收短消息的功能
 */
public class Receiver implements Runnable {
    private SMSMIDlet midlet;
    private int pendingMessages = 0;    //未处理的消息
    private boolean dead = true;
    private MessageConnection msgConn;
    private Inbox inbox;    //收件箱
    
    public Receiver(SMSMIDlet midlet, Inbox inbox) {
        this.midlet = midlet;
        this.inbox = inbox;
    }
    
    //在端口port打开一个sms连接,并启动一个接收消息的线程
    public MessageConnection openConnection(String port) throws IOException {
        msgConn = (MessageConnection)Connector.open("sms://:" + port);
        pendingMessages = 0;
        dead = false;
        //创建消息接收线程,并启动
        Thread t = new Thread(this);
        t.start();
        
        return msgConn;
    }
    
    //终止线程
    public synchronized void release() {
        try {
            msgConn.setMessageListener(null);
            dead = true;
            notify();   //通知线程
        }
        catch(IOException ioe) {
            //
        }
    }
    
    //处理消息
    public synchronized void handleMessage() {
        pendingMessages++;
        notify();   //通知线程,接收消息。
    }
    
    //返回收件箱
    public Inbox getInbox() {
        return inbox;
    }
    
    //接收到来的消息
    public void run() {
        while(!dead) {
            synchronized(this) {
                while(!dead && pendingMessages == 0) {
                    try {
                        wait(); //等待
                    }
                    catch(InterruptedException ie) {
                        
                    }
                }
            }
            
            if(!dead) {
                try {
                    //接收短信息
                    Message message = msgConn.receive();
                    pendingMessages--;
                    if(message instanceof TextMessage) {
                        inbox.add((TextMessage)message);
                        midlet.notifyUser();
                    }
                    else {
                        midlet.showError("不能解析的消息格式!");
                    }
                }
                catch(IOException ioe) {
                    midlet.showError("接收信息错误!\n" + ioe.toString());
                }
            }
        }
        
        try {
            msgConn.close();
            msgConn = null;
        }
        catch(IOException ioe) {
            
        }
    }
}

⌨️ 快捷键说明

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