Swing MBassador仅发送一条消息,除非处于调试模式

Swing MBassador仅发送一条消息,除非处于调试模式,swing,debugging,mbassador,Swing,Debugging,Mbassador,我有一个MBassador 1.2.0事件,但设置为自定义消息类型(界面消息): 在我的主面板类中,我有一个侦听器bean来侦听此消息: private class MessageHandler { @Handler public void handleFilesSelected(final FilesSelectedMessage message) { getLogger().info("new files selected; count {}", message.fileOb

我有一个MBassador 1.2.0事件,但设置为自定义消息类型(界面
消息
):

在我的主面板类中,我有一个侦听器bean来侦听此消息:

private class MessageHandler {
  @Handler
  public void handleFilesSelected(final FilesSelectedMessage message) {
    getLogger().info("new files selected; count {}", message.fileObjects().size());
  };
}
当然,当面板初始化时,我将该bean注册为订户:

getBus().subscribe(new MessageHandler());
当我正常运行此程序时,第一次选择文件时,我会收到一条日志消息,告诉我选择的文件数。但是如果我返回并选择完全相同的文件,我将不会收到更多的日志消息!(根据该代码,即使没有添加新文件,也应发布事件,并显示所选文件的总数。)

奇怪的是,如果我在发布消息的地方放置一个断点,并在消息处理程序中放置一个断点,然后在调试模式下运行应用程序,每次选择文件时都会命中这两个断点,并且每次都会打印日志消息!但是,如果我继续在调试模式下并删除消息处理程序中的断点,应用程序将到达消息发布的断点,但日志消息永远不会打印。即使我将断点放回消息处理程序中,消息处理程序断点也不会再次命中

无论我同步还是异步发布消息,都会发生这种行为

我知道我构建MBassador的方式不受欢迎,我也知道创建事件总线实例的正确方式(因为在线文档已经过时且不正确)。但这仍然不能解释这种奇怪的行为


知道为什么只有第一条消息通过吗?但只要我在调试模式下设置了断点,功能就可以了?

我今天早上还没起床就想到了答案。默认情况下,MBassador使用弱引用,因此我确信侦听器bean正在被垃圾收集。调试器中的断点必须将其保留更长时间。我只是想知道为什么它挂了那么久,没有立即发布。但是在任何情况下,我已经验证了bean类上的
@Listener(references=references.Strong)
会产生预期的行为

private class MessageHandler {
  @Handler
  public void handleFilesSelected(final FilesSelectedMessage message) {
    getLogger().info("new files selected; count {}", message.fileObjects().size());
  };
}
getBus().subscribe(new MessageHandler());