问题描述
假设您引发该事件的班级称为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);
并在此呼叫之后,可以听到所有SomeEvent
由发出的A
声音B
!
使用Observable和Observer模式,我们可以看到它A
是一个Observable,B
也是一个Observer。
这很简单!
解决方法
我目前正在研究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;
}
}
本质上,我想发生的是从客户端收到特定消息时,我需要另一个类中的函数才能运行。我花了持续两个小时阅读Observable
,Observer
,Interfaces
和事件处理程序,但我真的不知道如何处理此问题。
库中也提到了这一点DataListener
,但是我不知道那是什么,因为库中几乎没有文档。
任何意见或建议,将不胜感激。
谢谢