仅在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异常。
答案 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;它应该让你回到第一个表格。这大致是你描述的工作流程。