Обобщения и коллекции в GWT, Null Pointer - PullRequest
1 голос
/ 25 февраля 2009

При вызове метода, который добавляет объект в коллекцию в GWT, я получаю ошибку нулевого указателя. Я понятия не имею, почему, поскольку все, что я сделал, создает очень простой объект (содержит только строку). Вот код, который вызывает функцию и функцию:

public class PlantMenu extends VerticalPanel {

    private Collection<PlantData> plantList;
    private Collection<PlantData> newPlantData;

    public PlantMenu() {
        createPlants();
        /*
        for(Iterator<PlantData> i = plantList.iterator(); i.hasNext();) {
            Window.alert(i.next().getPlantName());
        }*/
    }

    public Collection<PlantData> createPlants() {
        PlantData plant1 = new PlantData("Herbs");
        PlantData plant2 = new PlantData("Flowers");
        PlantData plant3 = new PlantData("Vegetable");

        newPlantData.add(plant1);
        newPlantData.add(plant2);
        newPlantData.add(plant3);
        return newPlantData;
    }

}

Выдает ошибку (нулевой указатель) при попытке добавить первый завод, эта строка:

PlantData plant1 = новые PlantData ("Травы");

Любая помощь приветствуется:)

Ответы [ 2 ]

5 голосов
/ 25 февраля 2009

Вы не инициализировали свои коллекции. Несмотря на то, что вы уже сказали, что это не так, но я в этом сомневаюсь. Хотя показ полного стека исключений был бы гораздо более полезным. И исключение может возникнуть в вашем конструкторе PlantData, но вы его здесь не показывали.

Вы могли бы сделать что-то вроде этого,

private Collection<PlantData> plantList = new ArrayList<PlantData>();
private Collection<PlantData> newPlantData = new ArrayList<PlantData>();

Я использовал ArrayList, потому что обычно мы используем ArrayList. Другие реализации также могут быть использованы, в соответствии с требованиями.

0 голосов
/ 25 февраля 2009

Вы не инициализировали свои переменные должным образом, это не имеет никакого отношения к GWT и является просто базовой Java. Вот рабочая версия:

public class PlantMenu extends VerticalPanel {

    private List<PlantData> plantList = new ArrayList<PlantData>();
    private List<PlantData> newPlantData = new ArrayList<PlantData>();

    public PlantMenu() {
        createPlants();
        for(PlantData plant : newPlantData) {
                Window.alert(plant.getPlantName());
        }
    }

    public List<PlantData> createPlants() {
        newPlantData.add(new PlantData("Herbs"));
        newPlantData.add(new PlantData("Flowers"));
        newPlantData.add(new PlantData("Vegetable"));
        return newPlantData;
    }

}

В качестве примечания, вы должны расширять не VerticalPanel, а расширять Composite, а затем использовать вертикальную панель в качестве виджета с помощью setWidget (...);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...