关于 java me:初始化 ChoiceGroup J2ME MIDlet

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]