Java 自定义事件处理程序和侦听器 [英] Java custom event handler and listeners
问题描述
我目前正在使用 Socket.io 的 Java 实现,可在此处获得:netty-socketio
I'm currently playing around with a Java implementation of Socket.io, available here: netty-socketio
我已经启动并运行服务器,并且它在客户端和服务器之间很好地接收/发送消息,但是我需要在接收到某些消息时触发事件,这就是我感到困惑的地方.
I've got the server up and running, and its receiving/sending messages nicely between client and server, but I need to have events trigger on certain messages being received, and that's where I'm confused.
这是我的代码:
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;
}
}
基本上我想要发生的是当从客户端接收到特定消息时,我需要另一个类中的函数来运行.我在过去的两个小时里阅读了关于 Observable
、Observer
、Interfaces
和事件处理程序,但我真的不知道如何设置到此为止.
Essentially what I'd like to happen is when a particular message is received from a client, I need a function within another class to run. I've spent the last two hours reading about Observable
, Observer
, Interfaces
and event handlers, but I'm really not sure how to set this up.
图书馆还提到了这个 DataListener
,但我不知道那是什么,因为图书馆里的文档很少.
The library also makes mention of this DataListener
, but I've no idea what that is, as there's little documentation in the library.
对此的任何意见或建议将不胜感激.
Any input or advice on this would be greatly appreciated.
推荐答案
假设引发事件的类称为 A
.而需要监听事件的类叫做B
.该事件称为SomeEvent
.
Let's say your class that raises the event is called A
. And the class that needs to listen for the event is called B
. And the event is called SomeEvent
.
首先,创建一个名为SomeEventListener
的接口:
First, create an interface called SomeEventListener
:
public interface SomeEventListener {
void onSomeEvent ();
}
如果你想在事件发生时传递参数(通常是关于事件的一些东西),你可以将它添加到方法中.
If there are arguments that you want to pass when the event occurs (typically something about the event), you can add it to the method.
然后在 A
中,添加一个字段:
Then in A
, you add a field:
private SomeEventListener listener;
和一个方法:
public void setSomeEventListener (SomeEventListener listener) {
this.listener = listener;
}
这样B
就可以调用setSomeEventListener
来设置监听器.
This way, B
can call setSomeEventListener
to set the listener.
当事件发生时,A
应该调用
When the event occurs, A
should call
if (listener != null) listener.onSomeEvent ();
这就是 A
的全部内容!
And that's all there is to A
!
在B
中,需要实现接口:
public class B implements SomeEventListener {
public void onSomeEvent () {
//do whatever you like when SomeEvent happens.
}
}
你可以像这样监听SomeEvent
:
someInstanceOfA.setSomeEventListener (this);
并且在这个调用之后,所有A
引发的SomeEvent
都可以被B
监听!
And after this call, all the SomeEvent
raised by A
can be listened by B
!
使用 Observable 和 Observer 模式,我们可以看到 A
是一个 Observable,B
是一个 Observer.
Using the Observable and Observer pattern, we can see that A
is an Observable and B
is an Observer.
这很简单!
这篇关于Java 自定义事件处理程序和侦听器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!