【问题标题】:J2ME SMS receive not respondingJ2ME SMS 接收无响应
【发布时间】:2012-01-25 04:18:48
【问题描述】:

当我尝试在 j2me 中接收短信时,这段代码什么也不做。当从 startApp() 启动应用程序时,将启动一个新线程,该线程调用 run() 开始侦听消息。请看一下。

import javax.microedition.io.Connector;
import javax.microedition.lcdui.Alert;
import javax.microedition.lcdui.AlertType;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Display;
import javax.microedition.midlet.*;
import javax.wireless.messaging.BinaryMessage;
import javax.wireless.messaging.Message;
import javax.wireless.messaging.MessageConnection;
import javax.wireless.messaging.MessageListener;
import javax.wireless.messaging.TextMessage;

/**
 *
 */
public class Receiver extends MIDlet implements Runnable {

    Display display;
    Alert showMessage = new Alert("Msg", "Checking inbox..", null, AlertType.INFO);

    public void startApp() {
        Thread t = new Thread();
        t.start();
    }

    public void run() {
        try {
            // Time to receive one.
//get reference to MessageConnection object
            showMessage.setTimeout(Alert.FOREVER);
            display.getDisplay(this).setCurrent(showMessage);
            MessageConnection conn = (MessageConnection) Connector.open("sms://:50001");
//set message listener
            conn.setMessageListener(new MessageListener() {

                public void notifyIncomingMessage(MessageConnection conn) {
                    try {
                        Message msg = conn.receive();
                        //do whatever you want with the message
                        if (msg instanceof TextMessage) {
                            TextMessage tmsg = (TextMessage) msg;
                            String s = tmsg.getPayloadText();
                            System.out.println(s);
                            //showMessage.setTimeout(Alert.FOREVER);
                            showMessage.setString(s);
                            showMessage.setTitle("Welcome");
                            display.setCurrent(showMessage);

                        } else if (msg instanceof BinaryMessage) {
                            System.out.println("inside else if");
                        } else {
                            System.out.println("inside else");
                        }
                    } catch (Exception e) {
                    }
                }
            });
        } catch (Exception e) {
        }
    }

    public void pauseApp() {
    }

    public void destroyApp(boolean unconditional) {
    }
}

【问题讨论】:

    标签: java-me wma


    【解决方案1】:
    Thread t = new Thread();
    t.start();
    

    您需要阅读 Java 中的线程。

    目前,您正在启动一个什么都不做的新线程。

    the Javadoc for the empty Thread constructor:

    以这种方式创建的线程必须重写其 run() 方法才能实际执行任何操作。

    您的 MIDlet 实现了Runnable,因此您需要将其传递给线程。 试试这个:

    new Thread(this).start();
    

    【讨论】:

      猜你喜欢
      • 2012-12-30
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多