如何在java中创建方法的监听器
我真的很难实现一个方法的监听器。
在我目前的工作中,我必须每5秒请求一个方法以validation新信息,所以我想实现一种方法,每当新信息每5秒丢弃一次请求方法时就通知我。
(我已经阅读了有关观察者模式但没有成功实施。)
最好的祝福
更多信息:现在我要从smack XMPP库中重写此方法,以便在msgs队列中存储新消息
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秒执行一次此方法以validation新消息:
public String[] getMessage() { synchronized (lock) { String[] data; data=msgs.poll(); return data; } }
我正在尝试设置一个通知系统,每次执行processMessage时都会通知我。
好的,我设法解决了我的问题。
我基于观察者模型实现了一个监听器。 为此我必须实现一个我称为XMPPmessageListener的接口:
public interface XMPPmessageListener { public void readMsg(String senderJID, String msg); }
比在XmppHandler类中,processMessage和getMessage方法的类添加了添加和删除侦听器的方法,以及用于存储侦听器的LinkedList:
private LinkedList listeners = new LinkedList (); 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()); } } }
现在,每当收到消息时,我都可以通过创建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);