如何在java中创建方法的侦听器

lnvxswe2  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(457)

我在实现方法的侦听器时遇到了一个非常糟糕的问题。
在我目前的工作中,为了验证新信息,我必须每5秒请求一个方法,所以我想实现一个方法,在每次新信息出现时通知我,在每5秒丢弃请求的方法。
(我已经读过关于观察者模式的文章,但没有成功实现。)
致以最诚挚的问候
更多信息:目前我正在重写smackxmpp库中的这个方法,以便在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秒执行一次此方法,以验证新消息:

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

我正在尝试设置一个通知系统,每次执行processmessage时都会通知我。

zpgglvta

zpgglvta1#

好吧,我设法解决了我的问题。
我实现了一个基于观察者模型的监听器。为此,我必须实现一个称为xmppmessagelistener的接口:

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

在xmpphandler类中,processmessage和getmessage方法的类i添加了用于添加和删除侦听器的方法和用于存储侦听器的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());
        }
    }
}

现在,每当通过创建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);

相关问题