Java 自定义事件处理程序和侦听器
Posted
技术标签:
【中文标题】Java 自定义事件处理程序和侦听器【英文标题】:Java custom event handler and listeners 【发布时间】:2016-03-01 03:44:39 【问题描述】:我目前正在使用 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
,但我不知道那是什么,因为图书馆里的文档很少。
对此的任何意见或建议将不胜感激。
【问题讨论】:
我在这里没有发现问题。不调用println?有什么例外吗?请让clientData类以大写开头。 没有调用 println,但我需要另一个类来通知这已经发生。我认为这就是事件监听器的意义所在? 是的。这正是您在代码中所拥有的。监听器是实现 DataListener 的匿名类。 【参考方案1】:假设您的引发事件的类名为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
是一个 Observer。
这很简单!
【讨论】:
对不起,我对 Socket.io 一无所知。以上只是事件和监听器的一般实现。 就这么简单!非常感谢,我昨晚正在尝试这个,但我无法理解它。这正是我现在需要的,再次感谢伙计!以上是关于Java 自定义事件处理程序和侦听器的主要内容,如果未能解决你的问题,请参考以下文章
Java AWT 图形界面编程事件处理机制 ① ( 事件处理步骤 | 创建事件源对象 -> 自定义事件监听器 -> 创建监听器实例对象 -> 事件源绑定事件监听器 )