我真的很难实现一个方法的监听器.
在我目前的工作中,我必须每5秒请求一个方法以验证新信息,所以我想实现一种方法,每当新信息每隔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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
并且我每0.5秒执行一次此方法以验证新消息:
public String[] getMessage() {
synchronized (lock) {
String[] data;
data=msgs.poll();
return data;
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试设置一个通知系统,每次执行processMessage时都会通知我.
好的,我设法解决了我的问题.
我基于观察者模型实现了一个监听器.为此,我必须实现一个我称为XMPPmessageListener的接口:
public interface XMPPmessageListener {
public void readMsg(String senderJID, String msg);
}
Run Code Online (Sandbox Code Playgroud)
比在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);
}
Run Code Online (Sandbox Code Playgroud)
比我在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());
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,每次收到消息时都可以通过创建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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7000 次 |
| 最近记录: |