【问题标题】:To what source type a listener is added, when implementing a weak listener? (Java)在实现弱侦听器时,将侦听器添加到什么源类型? (爪哇)
【发布时间】:2019-11-18 09:23:04
【问题描述】:

this 上关于WeakListeners 的文档我发现代码被剪断了:

    private void registerTo(Source source) {
        listener = new Listener();
        source.addChangeListener(WeakListeners.change (listener, source));
    }

    private class Listener implements ChangeListener {
        public void stateChanged(ChangeEvent e) {
            doSomething();
        }

他们正在写的那个源对象是什么?我们在谷歌上找不到任何东西。

【问题讨论】:

  • 源对象是触发事件的对象,你想听。例如,如果您想知道按钮何时被点击,您可以为按钮上的点击事件注册一个监听器。按钮是源。它是发出点击事件的按钮。
  • 感谢您的回答。我的类必须实现什么确切的接口,或者我的类必须从哪个类扩展,才能作为参数放入 registerTo() ?
  • 我认为你不需要实现任何接口。

标签: java listener netbeans-platform


【解决方案1】:

我检查了您链接的文档。 再往下说:

它本身是从源的实现中强烈引用的(例如,从它的 EventListenerList 中)

给你一个可以在那里使用的类的例子。 确实在

的文档中
WeakListeners.change (listener, source)

源是一个对象,因此它可以是您用作事件源的任何东西。 如果您继续阅读该文档,那么您会看到:

它试图从源中注销自己。这就是为什么它需要参考来源进行注册。注销是使用反射完成的,通常查找源的方法 remove 并调用它。

如果源没有预期的 remove* 方法和/或如果您提供了错误的源引用,这可能会失败。在这种情况下,弱侦听器实例将保留在内存中并由源注册,而侦听器和观察者将被释放。

所以我猜你需要使用带有某种移除方法的接口。

我浏览了 Javadoc 索引并找到了这个 (MenuBar) 作为我认为您正在寻找的示例。

希望这会有所帮助。

干杯!

【讨论】:

    猜你喜欢
    • 2011-08-16
    • 2013-02-17
    • 2011-09-28
    • 1970-01-01
    • 2016-02-08
    • 2023-03-27
    • 2022-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多