CSDN博客

img hellerfly

翻译Sun帮助文件——javax.wireless.messaging(MessageListener)

发表于2003/2/5 19:34:00  609人阅读

javax.wireless.messaging
  Interface MessageListener

MessageListener接口提供了一个可使程序在有信息到来时得到通知的机制。

  当有信息到来时,notifyIncomingMessage()将被调用。程序必须用MessageConnection的receive()方法接收信息。MessageListener却不应直接调用receive(),而应该使用一个新的线程,或调用一个不在此接口内部实现的方法来间接地调用receive()。比如下面一个简单的MessageListener实现将展示如何使用MessageListener。

  此接口提供的机制使得程序不需要在receive()方法中将线程挂起。

  如果有不止一个信息在接近的时刻到达,此接口的实现将可能被同步地被通知。程序必须同步某些部分以处理上述情况。

__________________________________________________________________________

简单的MessageListener实现

以下的代码展示了如何使用MessageListener。在这个例子中一个独立的线程被用来处理信息的接收。

 import java.io.IOException;
 import javax.microedition.midlet.*;
 import javax.microedition.io.*;
 import javax.wireless.messaging.*;
 public class Example extends MIDlet implements MessageListener {
      MessageConnection messconn;
      boolean done;
      Reader reader;
       //初始化
      public void startApp() {
        try {
         // 建立连接
           messconn = (MessageConnection)
           Connector.open("sms://:6222");
          // 注册listener
            messconn.setMessageListener(this);
           / / 建立接受信息的线程
           done = false;
            reader = new Reader();
            new Thread(reader).start();
            } catch (IOException e) {
              // 处理错误
            }
        }
       // 同步
      public void notifyIncomingMessage(MessageConnection conn) {
          if (conn == messconn) {
          reader.handleMessage();
      }
      }
      // 关闭连接
      // 停止线程
      public void pauseApp() {
         done = true;
         try {
          messconn.close();
         } catch (IOException e) {
             //处理错误
         }
      }
      // MIDlet 停止
      // @param unconditional forced shutdown flag
      public void destroyApp(boolean unconditional) {
            done = true;
            try {
           messconn.setMessageListener(null);
           messconn.close();
            } catch (IOException e) {
               // 错误处理
            }
       }
      //用另外的线程处理信息接收则
      // notifyIncomingMessage()可以很快返回
      class Reader implements Runnable {
           private int pendingMessages = 0;
  
          // 处理接收信息的实际工作
           public void run() {
             while (!done) {
              synchronized(this) {
                 if (pendingMessages == 0) {
                    try {
                          wait();
                          } catch (Exception e) {
                             // 处理错误
                   }
                 }
                pendingMessages--;
              }
 
             // 使用的MessageListener好处
             // 这个线程可由同样的机制激活
            // 来处理别的事件
            //而不仅是接收信息
  
             try {
                Message mess = messconn.receive();
                 } catch (IOException ioe) {
                     // 处理错误
                 }
              }
         }
 
       public synchronized void handleMessage() {
           pendingMessages++;
           notify();
       }
  
     }
 }

 ________________________________________________________________________

Method Detail

 notifyIncomingMessage
 public void notifyIncomingMessage(MessageConncetion conn)

 当由信息到来是由系统调用,并且每一条信息都将引发此方法被调用。

 提示:
   此方法的实现必须快速的返回,不应做任何不必要的操作。程序不应该在此方法中接收或处理信息。它只应激发
程序处理信息的线程。

Parameters:
  conn:信息抵达的MessageConnction。

0 0

相关博文

我的热门文章

img
取 消
img