2012-01-25 80 views
3

當我嘗試在j2me中接收短信時,這段代碼什麼都不做。當從startApp()啓動應用程序時,會啓動一個調用run()的新線程,以開始偵聽消息。請看一看。J2ME短信接收沒有響應

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) { 
    } 
} 

回答

2
Thread t = new Thread(); 
t.start(); 

您需要閱讀了有關Java的線程。

目前,你正在開始一個新的線程,它不會沒有

見這種方式創建必須重寫他們的run()方法來實際做任何事情the Javadoc for the empty Thread constructor:

線程。

您的MIDlet實現Runnable,因此您需要將它傳遞給線程。 試試這個:

new Thread(this).start(); 
+0

哦對不起!無論如何感謝.. – ruben