#codenameone
#codenameone
Вопрос:
На iPhone у меня часто возникают исключения нулевого указателя в SwipeableContainer.close() из-за того, что getComponentForm возвращает null (см. stacktrace ниже). Я предполагаю, что это означает, что 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
Ответ №1:
деинициализация должна вызываться при удалении компонента или формы. Но в этом случае это может привести к сбою, если у нас есть цепочка событий с несколькими операциями, где действие пользователя может вызвать как закрытие, так и удаление.
Обходной путь состоит в том, чтобы обернуть вторую операцию в a callSerially
, чтобы отложить ее до следующего цикла EDT, но на данный момент я просто добавил исправление к исключению нулевого указателя close()
, чтобы метод не сработал, если нет родительского Form
элемента.