1

Я попытался адаптировать класс, который я нашел в Интернете, для динамического массива int для динамического массива «Entities», но теперь я получаю «исключение NullPointerException».Java Null Pointer Exception

код повышения исключение составляет:

public void initialize() 
{ 
    buffer = new BufferedImage(800,600,BufferedImage.TYPE_INT_RGB); 
    Entities.put(Entities.getCurrentPos()+1, new Entity(100, 100, Color.green)); 
    Entities.put(Entities.getCurrentPos()+1, new Entity(400, 400, Color.blue)); 
} 

Соответствующие части класса DynArrayEntities:

... 

private Entity[] data; // An array to hold the data. 
private int currentpos = 0; 

... 

public void put(int position, Entity value) { 

    if (position >= data.length) { 

     int newSize = 2 * data.length; 
      if (position >= newSize) 
       newSize = 2 * position; 
     Entity[] newData = new Entity[newSize]; 
     System.arraycopy(data, 0, newData, 0, data.length); 
     data = newData; 
    } 

    data[position] = value; 
    currentpos++; 

} 

.... 

public int getCurrentPos() { 
    return currentpos; 
} 

Заранее спасибо за вашу помощь!

+3

В случае исключений в Java, stacktrace довольно важен. Он подробно описывает историю вызовов и указывает первую строку, в которой было вызвано это исключение. Не зная вызова и где первая строка точек трассировки в вашем коде, трудно, а не невозможно - дать надежный ответ на основе только разделенного кода, который не представляет собой SSCCE (http://sscce.org) , Таким образом, в будущем *, пожалуйста, также разместите stacktrace. Или приложите немного усилий, чтобы научиться читать/интерпретировать стек. – BalusC

+0

Похоже, что назначение программирования начинающего. Большинство людей просто будут использовать встроенный класс из Java. –

+0

Хех. Не знал, что для этого был встроенный Java-класс. : D Боюсь, что я сосать в googling ... –

ответ

3
... 

private Entity[] data= new Entity[0]; // Or some value > 0 
... 

В противном случае данные являются нулевыми при первом доступе к нему в методе.

+0

Было бы типично для реализации, как это, включить конструктор с аргументом «емкость» для определения начального размера массива. См. Класс Java ArrayList. –

+0

Да, похоже, я не инициализировал массив правильно. Благодаря! –

2

вы делаете

position >= data.length 

перед инициализацией data

+0

Да, вы и Карстен заметили мою ошибку. Благодаря! –

0

(Is Сущности поле? В этом случае вы должны назвать его сущностями. См http://java.sun.com/docs/codeconv/)

Вы должны точно сказать, что на в какую линию находится NPE. Если он находится во второй строке метода initialize(), то, вероятно, поле Entities будет null. Если это в методе put(), возможно, это потому, что поле данных равно null.

+0

Извините, что вы не поняли об ошибке. Спасибо за вашу помощь! –

0

Вы делаете это как учебное упражнение? Если нет, почему бы не использовать java.util.Vector, который предоставляет динамический массив для любого Object?

+0

Я вижу! Я предполагаю, что я буду использовать вектор, чтобы удерживать все объекты. –