繁体   English   中英

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

[英]Java custom event handler and listeners

我目前正在使用 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 ,但我不知道那是什么,因为库中的文档很少。

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

假设您引发事件的类称为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是一个观察者。

这很容易!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM