初始化ChoiceGroup + J2ME MIDlet

时间:2012-12-28 16:41:38

标签: java-me initialization midp lcdui midlet

我将XML解析为自定义博客类数组,我试图在屏幕上显示我的博客类的.name属性的ChoiceGroup。

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,有没有人有任何想法?

2 个答案:

答案 0 :(得分:2)

问题在于我使用的是Choice.IMPLICIT,对于ChoiceGroup不存在,但对于List。

更改Choice.EXCLUSIVE工作正常。

答案 1 :(得分:0)

我的主要错误是我认为你的MIDlet中没有使用适当的logging。这使得调试你所描述的问题变得多么复杂。您发布的代码段中的错误。

  • 正确完成日志记录(如果您感兴趣,请refer here for details),您只需在模拟器中运行midlet并检查控制台消息,以确定是否需要预期代码。

从您发布的代码段和您的解释看起来intBloggerLength值不是常量。再加上你提到的有问题的行中调用ChoiceGroup构造函数的方式,这看起来是获得IllegalArgumentException的可靠方法。

  • 如果您将此行包装到try-catch并将适当的日志记录代码放入catch块中,您可以自己找到,但由于您没有这样做,我们只能猜测。请注意,如果您在模拟器中进行测试,则还有可能在其控制台中显示异常消息和堆栈跟踪。

要了解如何获得该异常,请参阅API javadocs了解您使用的构造函数:

  

<强>抛出:
    ... IllegalArgumentException - 如果imageElements数组为非null且与stringElements数组的长度不同...

在API文档中列出的异常还有其他三个可能的原因,但我会集中在您的代码段看起来非常滑的地方。

让我们回顾一下你的代码,图像数组长度为6:{null, null, null, null, null, null} - 这意味着只要intBloggerLength与6不同,就会抛出IAE。

要解决此问题,最简单的方法是传递null值而不是图像数组。或者,如果您需要数组不为null,只需编写代码以使其具有有效长度,例如

new Image[menuItems.length]