2012-08-25 71 views
1

我真的很不情願爲方法實現監聽器。如何在java中爲方法創建監聽器

在我目前的工作中,我必須每5秒鐘申請一個方法以驗證新信息,所以我想實施一種方法,以便每當新信息在每5秒鐘丟棄一次請求方法時通知我。

(我已經讀到觀察者模式,但沒有成功實施。)

問候

的更多信息: 現在IM壓倒一切從拍擊XMPP庫這個方法,以便存儲新郵件在封郵件隊列

public void processMessage(Chat chat, Message message) { 
    if (message.getType() == Message.Type.chat) { 
     req = message.getBody().toString(); 
     String[] temp = { chat.getParticipant().toString(), req }; 
     System.out.println(temp[0]+"says:"+temp[1]); 
     synchronized (lock) { 
      msgs.add(temp); 
     } 
    } 
} 

和比我爲了每0.5秒執行這個方法來驗證新郵件:

public String[] getMessage() { 
    synchronized (lock) { 
     String[] data; 
     data=msgs.poll(); 
     return data; 
    } 
} 

我想設置一個通知系統,通知我每次processMessage執行。

+3

我很抱歉,但它是很難理解你的要求。請更改您的問題,使之更加清晰,最好使用您嘗試過的某些代碼,您正面臨的特定問題以及*特定問題*以供我們回答。 – thkala

+1

請給我們一些代碼,以請工作! – DankMemes

+0

您仍然沒有提及該方法,以及您對該方法的控制級別。它的代碼是否可用?你能修改它嗎?你可以在孩子班上覆蓋它嗎? – thkala

回答

6

好吧,我設法解決我的問題。

我實現了一個基於觀察者模型的偵聽器。對於我不得不實現一個界面,我叫XMPPmessageListener:

public interface XMPPmessageListener { 
    public void readMsg(String senderJID, String msg); 
} 

比XmppHandler類,類方法而processMessage和的getMessage我添加的方法添加和刪除監聽器和存儲聽衆一個LinkedList:

private LinkedList<XMPPmessageListener> listeners = new LinkedList<XMPPmessageListener>(); 

public void addMsgListener(XMPPmessageListener listener){ 
    listeners.add(listener); 
} 

public boolean removeMsgListener(XMPPmessageListener listener){ 
    return listeners.remove(listener); 
}  

比我爲了警告聽衆而processMessage方法一番交流:

public void processMessage(Chat chat, Message message) { 
    if (message.getType() == Message.Type.chat) { 
     for(XMPPmessageListener l: listeners){ 
      l.readMsg(chat.getParticipant().toString(), message.getBody().toString()); 
     } 
    } 
} 

現在,我可以在任何我被通知每次的ThOD的消息是通過創建一個XMPPmessageListener接收並決定如何通過重寫readMsg方法與消息做:

XmppHandler xmpp = new XmppHandler(XMPPuser, XMPPpassword, XMPPaddress, XMPPdomain, XMPPport); 

XMPPmessageListener msglistener = new XMPPmessageListener() { 

       @Override 
       public void readMsg(String senderJID, String msg) { 
        String asw=xmlHandler.processMsg(msg,senderJID); 

       } 
      }; 
      xmpp.addMsgListener(msglistener);