在编辑时切换表单时iOS上的空指针异常

时间:2018-03-28 08:43:14

标签: codenameone

仅在iOS版本中,我在Null Pointer Exception中运行了一周。 Android和模拟器上没有任何内容。

仅在我编辑TextField并单击按钮切换到另一个表单或单击/滑动以展开侧面菜单时才会出现。

我们升级到专业版以获得stackTrace,我们得到了这个:

[EDT] 0:0:11,620 - Exception: java.lang.NullPointerException - null
java.lang.NullPointerException
at com_codename1_ui_Display.invokeAndBlock:1209
at com_codename1_ui_Display.invokeAndBlock:1223
at com_codename1_impl_ios_IOSImplementation.editString:810
at com_codename1_impl_CodenameOneImplementation.editStringImpl:309
at com_codename1_ui_Display.editString:1503
at com_codename1_ui_Display.editString:1471
at com_codename1_ui_TextArea_2.run:1750
at com_codename1_ui_Display.processSerialCalls:1129
at com_codename1_ui_Display.edtLoopImpl:1073
at com_codename1_ui_Display.mainEDTLoop:961
at com_codename1_ui_RunnableWrapper.run:120
at com_codename1_impl_CodenameOneThread.run:176
at java_lang_Thread.runImpl:153

出现的主要情况是用于在无限容器中搜索的文本字段,我们在应用程序的任何地方都有这种结构,因为它是一个ERP。

这是摆脱这个的方法吗?在我们的生产应用程序中弹出NPE显然是一件坏事。 专业版和bindCrashProtection设置为true可以防止显示NPE,但我们不知道它是否会导致不良行为,毕竟它是EDT异常。

1 个答案:

答案 0 :(得分:1)

我不确定究竟是什么造成了这种情况,到目前为止我似乎无法重现它。以下是我正在使用的测试案例。如果您有可以重现该问题的测试用例,请提供。否则,请修改此测试用例以使其失败。

private void runTest() {
      Form f = new Form("Test", BoxLayout.y());
      Button b = new Button("Start");
      b.addActionListener(e->{
            showLegacyTestForm();
      });
      f.add(b);
      f.show();
}

private void showLegacyTestForm() { Form hi = new Form("Legacy Test"); //createToolbar(hi); hi.setLayout(new BoxLayout(BoxLayout.Y_AXIS)); Button back = new Button("Back"); Form prev = Display.getInstance().getCurrent(); back.addActionListener(e->{ if (prev != null) { prev.showBack(); } }); hi.addComponent(back); for (int i = 0; i < 30; i++) { TextField fi = new TextField("Field " + i); hi.addComponent(fi); } hi.setScrollableY(false); hi.show(); }

(测试用例的概念,是你点击&#34;开始&#34;按钮带你到一个带有一堆文字字段的表格。开始编辑一个字段,然后按&#34;返回&# 34;它应该让你回到第一个表格。这大致是你描述的工作流程。