Java 执行回调时删除监听器

标签 java events

当我执行某些事件时,我只是不知道如何删除监听器。我在使用 websockets 时遇到了一些泄漏问题,这可能可以解决它。

final WebSocket w = asyncHttpClient.prepareGet(url)
    .execute(new WebSocketUpgradeHandler.Builder().build())
    .get();

w.addWebSocketListener(new WebSocketTextListener() {

    public void onMessage(String message) {
        listener.onMessage(responseMessage);
        // Here is the place I want to do my w.removeWebSocketListener(l);
    }

    @Override
    public void onFragment(String s, boolean b) {
    }

    public void onOpen(WebSocket websocket) {
    }

    @Override
    public void onClose(WebSocket webSocket) {
    }

    @Override
    public void onError(Throwable throwable) {
    }

});

问题是当我创建 WebSocketTextListener lis = new .... 并传入一个对象需要其他对象而其他对象依赖于此时,我现在仍然允许做我想做的事。
看起来很简单,但是想不通。

最佳答案

通常可以使用 removeXXXListener 方法删除事件监听器。但它要求您提供完全相同的事件监听器实例作为参数。您可以存储事件监听器,然后使用相同的引用将其删除。但由于您在 onMessage 消息中已经位于事件监听器的范围内,因此使用 this 应该可以工作。

尝试类似的事情

listener.onMessage(responseMessage);
// Here is the place I want to do my w.removeWebSocketListener(l);
w.removeWebSocketListener(this);

关于Java 执行回调时删除监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13288389/

相关文章:

events - Magento - 加载页面后执行的最后一个事件名称

PowerShell 5 中从未处理过的 C# 事件

c# - 伪造键盘或鼠标事件

java - HazlecastMap 上 SQLPredicate 的返回类型

java - 身份验证 Oauth 2.0 谷歌日历

java - 如何在使用 CardLayout 切换后启动 JPanel

java - 如何避免子 GUI 对象接管鼠标监听器?

Java - 如何在两个或多个 Web 应用程序之间共享 session ?

java - 闯关游戏中只有一 block 砖 block 消失

javascript - 如何正确使用SWFObject