Initialising ChoiceGroup + J2ME MIDlet
我已将 XML 解析为自定义博客类数组,因此我试图在屏幕上显示我的博客类的 .name 属性的 ChoiceGroup。
1 2 3 4 5 6 7 8
| for(int i = 0; i< intBloggerLength; i++)
{
menuItems[i] = myXMLParser.arrBloggers[i].getName();
//lstView.append(myXMLParser.arrBloggers[i].getName().toString(), null);
}
String strPause ="";
grpMenuItems = new ChoiceGroup("Bloggers", Choice.IMPLICIT, menuItems,
new Image[] {null, null, null, null, null, null}); |
"grpMenuItems =..." 是出错的行,并且使我的 MIDlet 崩溃,我一直在在线跟踪示例,并且我正在以相同的方式填充 ChoiceGroup,有人有什么想法吗?
问题是我使用的 Choice.IMPLICIT 对于 ChoiceGroup 不存在,但对于 List。
更改 Choice.EXCLUSIVE 效果很好。
-
找到错误的好工作。考虑接受您的答案,为未来的读者指明解决方案
您的主要错误是我认为没有在您的 MIDlet 中使用适当的登录。这使得调试像你描述的问题变得不必要的复杂。您发布的代码段中存在错误。
-
正确完成日志记录(如果您有兴趣,请参阅此处了解详细信息),您可以简单地在模拟器中运行您的 midlet 并检查控制台消息以找出是否预期的代码。
从您发布的代码片段和您的解释看来,intBloggerLength 值不是恒定的。再加上您在提到有问题的行中调用 ChoiceGroup 构造函数的方式,这看起来是获得 IllegalArgumentException.
的可靠方法
-
如果您将这一行package到 try-catch 中并将适当的日志记录代码放入 catch 块中,您可以自己发现这一点,但由于您没有这样做,我们只能猜测。请注意,如果您在模拟器中进行测试,也有可能在其控制台中显示异常消息和堆栈跟踪。
要了解如何获得该异常,请参阅 API javadocs 了解您使用的构造函数:
Throws:
...IllegalArgumentException - if the imageElements array is non-null and has a different length from the stringElements array...
在 API 文档中列出了引发异常的其他三个可能原因,但我将重点关注一个您的代码片段看起来很滑的原因。
让我们回顾一下您的代码,图像数组长度为 6:{null, null, null, null, null, null} - 这意味着只要 intBloggerLength 与 6 不同,就会抛出 IAE。
要解决这个问题,最简单的方法是传递 null 值而不是图像数组。或者,如果您需要数组不为空,只需编写代码使其具有有效长度,例如
1
| new Image[menuItems.length] |
- 感谢带有 Images[] 参数的指针,它最初设置为空。我添加了数组,以防它和 String[] 之间的不同长度导致错误。它现在恢复为 null,并且工作正常,只需要通过 MIDlet 中的命令选项进行操作。
-
@StephenMurby 很好地找到了关于选择类型的错误!顺便说一下,我提到的 API 文档中也列出了它:"IllegalArgumentException - 如果选择类型不是 EXCLUSIVE、MULTIPLE 或 POPUP 之一"