Добавление макета в контейнер в цикле вызывает исключение NullpointerException.

Я разрабатываю s60, используя j2me с LWUIT в Eclipse.

Я пишу этот метод для рисования элемента списка и пытаюсь создать список вручную, а не с помощью списка Lwuit. Потому что, как я написал в своем последнем вопросе, вот LinK.. Не знаю почему, но это снижает производительность.

Итак, в приведенном ниже методе я пытаюсь создать, в котором я добавляю две метки в контейнер layoutX и добавляю этот Conatiner в контейнер layoutY и добавляю этот 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");

    }

В приведенном выше методе, когда я пытаюсь назначить макет контейнеру, он запускает исключение NullPointerException в строке containerX[i].setLayout(layoutX);.

Я не понимаю, почему это происходит, я также пытался прокомментировать эти строки, после чего он запускает исключение NullPointerException в строке containerX[i].getStyle().setPadding(0, 0, 2, 2);.

пожалуйста помоги ....


person MobileEvangelist    schedule 13.07.2012    source источник


Ответы (1)


Основываясь на исходном коде, я предполагаю, что вы думаете, что создание экземпляра массива также заполняет его. В Java такого нет.

Другими словами, если вы думаете, что containerX выглядит в памяти как:
[new Container, new Container,..., new Container]
, это неверно. На самом деле это выглядит так:
[null,null,...,null]

Я думаю, вам нужно добавить

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

в начале цикла.

(Возможно, вы хотите создать экземпляр содержимого массивов как подклассы контейнера)

person michael aubert    schedule 13.07.2012
comment
я добавил эти строки, containerX[i] = new Container(layoutX); containerY[i] = новый контейнер (новый BoxLayout (BoxLayout.Y_AXIS)); но он все еще не работает. такая же ошибка вылетает - person MobileEvangelist; 13.07.2012
comment
я опубликовал в своем последнем вопросе проблему с рендерингом списка вот LinK..< /а> - person MobileEvangelist; 13.07.2012
comment
пожалуйста, помогите мне .., я хочу добавить элемент списка дел в свои телефоны s60 программно, я использую lwuit, я много занимался серфингом, но ни один результат не помог .. - person MobileEvangelist; 16.07.2012