我扩展了AWTEventListener,然后将其添加到工具箱中。但是,当我尝试断言我的监听器在AWTListeners中时,断言失败。我从侦听器中调用它(尽管我不知道为什么这会引起问题)。

Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.MOUSE_EVENT_MASK
                                              | AWTEvent.KEY_EVENT_MASK
                                              | AWTEvent.MOUSE_MOTION_EVENT_MASK
                                              | AWTEvent.MOUSE_WHEEL_EVENT_MASK);
assert ArrayUtils.contains
                      (Toolkit.getDefaultToolkit().getAWTEventListeners(), this);

最佳答案

默认工具包中的AWTEventListener保留为代理(java.awt.event.AWTEventListenerProxy),它们包装了添加的侦听器。

Toolkit.getDefaultToolkit().addAWTEventListener(this, ...);

for (AWTEventListener listener : Toolkit.getDefaultToolkit().getAWTEventListeners()) {

    java.awt.event.AWTEventListenerProxy proxy = (java.awt.event.AWTEventListenerProxy) listener;
    if (proxy.getListener().equals(this) {
        // there, we found it.
    }
}

08-06 17:50