【问题标题】:Handle more listeners on the same event在同一事件上处理更多侦听器
【发布时间】:2018-12-23 04:22:43
【问题描述】:

这个问题被称为代号一。

如果同一事件有多个侦听器会发生什么?执行是否可预测?

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    是的:

    • 它们从第一个添加到最后一个添加的侦听器触发

    • 始终在 EDT

    • 如果其中一个侦听器调用ActionEvent.consume(),则执行停止

    有一个很大的警告。如果其中一个侦听器调用 invokeAndBlock 调用,例如addToQueueAndWait 或 show Dialog 等执行将停止,直到调用和块被释放并在之后恢复......

    这就是为什么如果您使用阻塞调用,您应该:

    • 串行调用
    • 消费活动

    【讨论】:

    • 每次我们使用 Codename One API 添加Listener 时,是否都会隐式调用EventDispatcher?在某些情况下我们需要明确使用EventDispatcher
    • 如果您使用(),特定事件调度程序中的循环将停止。问题是一个事件可以触发许多单独的事件,其中一些会受到影响,但有些不会。例如。指针释放将触发:表单上的指针释放(事件和回调),焦点组件上的指针释放,如果它是按钮或文本区域,则在其上的操作事件等。如果您使用 pointerReleased 事件,您将阻止操作事件发生沿着链条,所以行为应该是可以预测的。然而,由于这仍然是细微的行为,总会有边缘情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-11
    • 2017-12-16
    相关资源
    最近更新 更多