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

Ton*_*ony 7 java events listeners netty socket.io

我目前正在使用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;
}
Run Code Online (Sandbox Code Playgroud)

}

基本上我想要发生的是当从客户端收到特定消息时,我需要在另一个类中运行一个函数.我花了持续两个小时阅读Observable,Observer,Interfaces和事件处理程序,但我真的不知道如何处理此问题.

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

任何意见或建议将不胜感激.

谢谢

Swe*_*per 34

假设你的班级引发了这个事件A.并且需要监听事件的类被调用B.这个事件被称为SomeEvent.

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

public interface SomeEventListener {
    void onSomeEvent ();
}
Run Code Online (Sandbox Code Playgroud)

如果在事件发生时您想要传递参数(通常是关于事件的某些参数),则可以将其添加到方法中.

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

private SomeEventListener listener;
Run Code Online (Sandbox Code Playgroud)

和方法:

public void setSomeEventListener (SomeEventListener listener) {
    this.listener = listener;
}
Run Code Online (Sandbox Code Playgroud)

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

当事件发生时,A应该打电话

if (listener != null) listener.onSomeEvent ();
Run Code Online (Sandbox Code Playgroud)

这就是全部A!

B,您需要实现接口:

public class B implements SomeEventListener {
    public void onSomeEvent () {
        //do whatever you like when SomeEvent happens.
    }
}
Run Code Online (Sandbox Code Playgroud)

你可以这样听SomeEvent:

someInstanceOfA.setSomeEventListener (this);
Run Code Online (Sandbox Code Playgroud)

在这个电话之后,所有被SomeEvent提出的人A都可以听B!

使用Observable和Observer模式,我们可以看到它A是一个Observable并且B是一个Observer.

这很简单!