如何在java中创建一个方法的监听器

Win*_*ter 2 java listener

我真的很难实现一个方法的监听器.

在我目前的工作中,我必须每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时都会通知我.

Win*_*ter 7

好的,我设法解决了我的问题.

我基于观察者模型实现了一个监听器.为此,我必须实现一个我称为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)