1

我在 Eclipse 中使用带有LWUIT的j2me开发s60 。

我正在编写此方法来绘制列表项并尝试手动创建列表而不是使用 Lwuit 列表。因为正如我在最后一个问题中发布的那样,这里是 Link.. 不知道为什么,但它会降低性能。

因此,在下面的方法中,我尝试创建在其中添加两个标签到 layoutX Container 并将该 Conatiner 添加到 layoutY Container 并将该 layoutY 添加到 BaseContainer 以便输出看起来像列表。

方法在这里...

private void drawAgendasListItem(Vector vector) {

        Container containerX[] = new Container[vector.size()];
        Container containerY[] = new Container[vector.size()];

        if (featuredeventsForm.contains(baseContainer)) {
            baseContainer.removeAll();
            featuredeventsForm.removeComponent(baseContainer);
            System.out.println("base Container is removed ");
        }

        BoxLayout layoutX = new BoxLayout(BoxLayout.X_AXIS);
            BoxLayout layoutY = new BoxLayout(BoxLayout.Y_AXIS);

        for (int i = 0; i < vector.size(); i++) {

        try {
                containerX[i].setLayout(layoutX);
                containerY[i].setLayout(layoutY);

                Label startTime = new Label();
                Label description = new Label();

                startTime.getStyle().setBgTransparency(0);
                startTime.setText("start 10:20 Am");
                startTime.getStyle().setMargin(0, 0, 0, 5);

                description.getStyle().setBgTransparency(0);
                description.setText("decriptionString");

                containerX[i].getStyle().setPadding(0, 0, 2, 2);
                containerX[i].addComponent(startTime);
                containerX[i].addComponent(description);

                containerY[i].addComponent(containerX[i]);
                baseContainer.addComponent(i, containerX[i]);

                System.out.println("Component added to base Container @ " + i);

            } catch (Exception e) {
                System.out.println("Exception in drawAgendaListItem " + e);
            }
        }
        featuredeventsForm.addComponent(baseContainer);
        featuredeventsForm.invalidate();
        featuredeventsForm.repaint();
        System.out.println("All elements added and form repainted");

    }

在上述方法中,当我尝试将布局分配给 Container 时,它会在 line 处触发 NullPointerException containerX[i].setLayout(layoutX);

我不明白为什么会这样,我也试图评论那几行然后它在 line 触发 NullPointerException containerX[i].getStyle().setPadding(0, 0, 2, 2);

请帮忙 ....

4

1 回答 1

1

根据源代码,我的猜测是您认为实例化数组也会填充它。在 Java 中情况并非如此。

换句话说,如果你认为 containerX 看起来像:
[new Container, new Container,..., new Container]
在内存中,那是不正确的。它实际上看起来像:
[null,null,...,null]

我认为您需要添加

containerX[i] = new Container();
containerY[i] = new Container();

在循环的开始。

(也许您想将数组的内容实例化为 Container 的子类)

于 2012-07-13T09:59:04.800 回答