Java 自定义事件处理程序和侦听器

Posted

技术标签:

【中文标题】Java 自定义事件处理程序和侦听器【英文标题】:Java custom event handler and listeners 【发布时间】:2016-03-01 03:44:39 【问题描述】:

我目前正在使用 Socket.io 的 Java 实现,可在此处获得:netty-socketio

我已经启动并运行了服务器,它在客户端和服务器之间很好地接收/发送消息,但是我需要在接收到某些消息时触发事件,这就是我感到困惑的地方。

这是我的代码:

server.addEventListener("message", clientData.class, new DataListener<clientData>() 
    @Override
    public void onData(SocketIOClient client, clientData data, AckRequest ackRequest) throws Exception 
                System.out.println("Message from client: " + data.getMessage());

    
);


public class ClientData

    String message;

    public String getMessage() 
        return message;
    

    public void setMessage(String message) 
        this.message = message;
    


基本上我想要发生的是当从客户端接收到特定消息时,我需要另一个类中的函数来运行。在过去的两个小时里,我一直在阅读有关 ObservableObserverInterfaces 和事件处理程序的信息,但我真的不知道如何设置它。

图书馆也提到了这个DataListener,但我不知道那是什么,因为图书馆里的文档很少。

对此的任何意见或建议将不胜感激。

【问题讨论】:

我在这里没有发现问题。不调用println?有什么例外吗?请让clientData类以大写开头。 没有调用 println,但我需要另一个类来通知这已经发生。我认为这就是事件监听器的意义所在? 是的。这正是您在代码中所拥有的。监听器是实现 DataListener 的匿名类。 【参考方案1】:

假设您的引发事件的类名为A。而需要监听事件的类称为B。该事件被称为SomeEvent

首先,创建一个名为SomeEventListener的接口:

public interface SomeEventListener 
    void onSomeEvent ();

如果有你想在事件发生时传递的参数(通常是关于事件的东西),你可以将它添加到方法中。

然后在A,添加一个字段:

private SomeEventListener listener;

还有一个方法:

public void setSomeEventListener (SomeEventListener listener) 
    this.listener = listener;

这样B可以调用setSomeEventListener设置监听器。

当事件发生时,A 应该调用

if (listener != null) listener.onSomeEvent ();

这就是A的全部内容!

B中,需要实现接口:

public class B implements SomeEventListener 
    public void onSomeEvent () 
        //do whatever you like when SomeEvent happens.
    

你可以像这样收听SomeEvent

someInstanceOfA.setSomeEventListener (this);

在这个调用之后,A 提出的所有SomeEvent 都可以被B 监听!

使用 Observable 和 Observer 模式,我们可以看到 A 是一个 Observable,B 是一个 Observer。

这很简单!

【讨论】:

对不起,我对 Socket.io 一无所知。以上只是事件和监听器的一般实现。 就这么简单!非常感谢,我昨晚正在尝试这个,但我无法理解它。这正是我现在需要的,再次感谢伙计!

以上是关于Java 自定义事件处理程序和侦听器的主要内容,如果未能解决你的问题,请参考以下文章

Java AWT 图形界面编程事件处理机制 ① ( 事件处理步骤 | 创建事件源对象 -> 自定义事件监听器 -> 创建监听器实例对象 -> 事件源绑定事件监听器 )

Java - 创建自定义事件和侦听器

java自定义事件,线程a如何每一秒钟触发一个事件,然后另一个线程b监听之,并作出反应?

java 自定义事件的触发及监听

观察者模式(自定义事件)

从观察者模式谈论 : Spring Boot中创建发布和侦听自定义事件