Java自定义事件处理程序和侦听器
我目前正在研究Socket.io的Java实现,可在以下位置获得: 我已经启动并运行了服务器,它在客户端和服务器之间很好地接收/发送消息,但是我需要在接收到某些消息时触发事件,这就是我感到困惑的地方 这是我的密码:Java自定义事件处理程序和侦听器,java,events,socket.io,listener,netty,Java,Events,Socket.io,Listener,Netty,我目前正在研究Socket.io的Java实现,可在以下位置获得: 我已经启动并运行了服务器,它在客户端和服务器之间很好地接收/发送消息,但是我需要在接收到某些消息时触发事件,这就是我感到困惑的地方 这是我的密码: server.addEventListener("message", clientData.class, new DataListener<clientData>() { @Override public void onData(Soc
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;
}
}
server.addEventListener(“消息”,clientData.class,new DataListener(){
@凌驾
public void onData(SocketIOClient客户端、clientData数据、AckRequest AckRequest)引发异常{
System.out.println(“来自客户端的消息:+data.getMessage());
}
});
公共类ClientData{
字符串消息;
公共字符串getMessage(){
返回消息;
}
公共无效设置消息(字符串消息){
this.message=消息;
}
}
本质上,我希望发生的是,当从客户机接收到特定消息时,我需要在另一个类中运行一个函数。在过去的两个小时里,我一直在阅读有关Observable
、observator
、接口
和事件处理程序的内容,但我真的不知道如何设置它
库中也提到了这个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
监听
使用可观察和观察者模式,我们可以看到A
是可观察的,而B
是观察者
那很容易 我看这里没有问题。println没有被调用?有例外吗?请让clientData类以大写开头。不,println被调用,但我需要另一个类被通知发生了这种情况。我以为这就是事件的重点听众?是的。这正是代码中的内容。侦听器是实现DataListener的匿名类。很抱歉,我对Socket.io一无所知。以上只是事件和侦听器的一般实现。就这么简单!非常感谢,老兄,我昨晚试过了,但我的脑子都转不过来了。这正是我现在需要的,再次谢谢你,伙计!!