2009-02-25 4 views
1

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

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 («Трава»);

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

+0

Если ответ Уингара неверен, вы не предоставили нам достаточно информации, чтобы помочь вам. Если его ответ не поможет, тогда вам нужно предоставить нам дамп стека и дополнительную информацию. – Eddie

+0

Казалось бы, в конструкторе PlantData существует проблема. – Clint

ответ

5

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

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

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

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

+0

Итак, я не могу инициализировать коллекцию коллекций? Пробовал это, похоже, не работает. Это должен быть какой-то другой тип подкласса коллекции? – Organiccat

+0

Может быть, мы можем дать вам лучшую идею. Покажите нам код и уточните, чего вы пытаетесь достичь. –

+0

private Collection plantList = new Collection (); не работает правильно? Это все, я думаю, что не понимаю, как работает сборник. – Organiccat

0

Вы не правильно инициализировали свои переменные, это не имеет ничего общего с 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 (...);