首页 > 解决方案 > 从哪里调用 Component.deinitialize()?

问题描述

在 iPhone 上,由于 getComponentForm 返回 null(参见下面的堆栈跟踪),我经常在 SwipeableContainer.close() 中出现空指针异常。我认为这意味着 SwipeListener 没有被正确删除,这似乎发生在 SwipeableContainer.deinitialize() 中。但是,我无法弄清楚应该从哪里调用 deinitialize() 所以我不明白我需要做什么来避免这种情况。

有任何想法吗?

     [EDT] 12:19:43,5 - Exception: java.lang.NullPointerException - null 
     java.lang.NullPointerException
       at com_codename1_ui_SwipeableContainer.close:199
       at com_codename1_ui_SwipeableContainer_SwipeListener.actionPerformed:437
       at com_codename1_ui_util_EventDispatcher.fireActionSync:459
       at com_codename1_ui_util_EventDispatcher.fireActionEvent:362
       at com_codename1_ui_Form.fireReleaseListeners:3770
       at com_codename1_ui_Form.pointerReleased:3847
       at com_codename1_ui_Component.pointerReleased:4710
       at com_codename1_ui_Display.handleEvent:2359

标签: codenameone

解决方案


删除组件或表单时应调用 deinitialize。但在这种情况下,如果我们有一个包含多个操作的事件链,其中用户操作可以触发关闭和删除,这可能会失败。

解决方法是将第二个操作包装在 acallSerially中以将其推迟到下一个 EDT 周期,但现在我只是为空指针异常添加了一个修复,close()因此如果没有 parent,该方法不会失败Form


推荐阅读