如何在java中创建方法的监听器 [英] How to create a listener to a method in java

查看:115
本文介绍了如何在java中创建方法的监听器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I'm having a really bad time to implement a listener to a method.

在我目前的工作中,我必须每隔5秒请求一个方法以验证新信息,所以我想实现一种方法,每当新信息通知我每5秒丢弃一次请求方法。

In my current work i have to request a method every 5 seconds in order to verify for new information so i want to implement a method to notify me every time a new information come discarding the requesting method in every 5 seconds.

(我已经阅读了有关观察者模式但没有成功实施。)

(I already read about observer pattern but had no successful in implementing.)

最好的问候

更多信息:
现在我从smack XMPP库中覆盖此方法,以便在msgs队列中存储新消息

More information: For now i m overriding this method from the smack XMPP library in order to store new messages in msgs Queue

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秒执行一次以验证新消息:

and than i have this method executed every 0.5 seconds in order to verify new messages:

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

我正在尝试设置通知系统每次执行processMessage时我都会。

i'm trying to set a notification system that notifies me everytime the processMessage is executed.

推荐答案

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

Ok i manage to solve my problem.

我基于观察者模型实现了一个监听器。为此我必须实现一个我称为XMPPmessageListener的接口:

I implemented a listener based on observer model. For that i had to implement a interface that i called XMPPmessageListener:

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

比在XmppHandler类中,我添加了方法processMessage和getMessage的类添加和删​​除侦听器的方法以及用于存储侦听器的LinkedList:

than in the XmppHandler class, the class of the methods processMessage and getMessage i added methods to add and remove listeners and a LinkedList to store the listeners:

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方法中做了一些交换以警告听众:

than i did some exchanges in processMessage method in order to warn the listeners:

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方法决定如何处理消息:

Now i can be notified at any method everytime a message is receive by creating a XMPPmessageListener and decide what to do with the message by overriding the readMsg method:

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);

这篇关于如何在java中创建方法的监听器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆