2015-09-20 2 views
0

Я делаю что-то неправильно и не могу понять. У меня есть массив областей текстуры. Я инициализирую массив в конструкторе элементами из другого массива текстурной области в другом классе. Это прекрасно работает.java не может извлекать объекты массива из другого класса

Тогда в моем методе обновления я хочу заменить объекты в массиве различными случайными из массива в другом классе. Это приводит к ошибке с исключением из null указателя. Кто-нибудь может подтолкнуть меня в правильном направлении? Код ниже.

Level1 lvl1 = new Level1(); 
//initialize local array with objects from array in lvl1 
shapes = new TextureRegion[4]; 
txt1 = new TextureRegion(lvl1.shapes[0]); 
txt2 = new TextureRegion(lvl1.shapes[1]); 
txt3 = new TextureRegion(lvl1.shapes[2]); 
txt4 = new TextureRegion(lvl1.shapes[3]); 
shapes[0] = txt1; 
shapes[1] = txt2; 
shapes[2] = txt3; 
shapes[3] = txt4; 

Указанные работы. Затем метод обновления:

for (int x = 0; x < 4; x++) { 

    int rnd = random.nextInt(15); 
    System.out.println(rnd); 

    shapes[x] = lvl1.shapes[0]; 
} 

Это генерирует исключение нулевого указателя. Для целей тестирования я просто пытаюсь получить доступ к первому объекту. 0 следует заменить на rnd.

+0

Было бы полезно указать, в каких методах отображаются фрагменты кода, которые вы разместили, и где вы объявляете все переменные, используемые в этих методах. – Eran

+1

Как писал @Eran - у вас есть проблема с объявлением переменных. Возможно, что вы работаете с переменными в разных областях видимости. Можете ли вы предоставить код, в котором вы создаете эту переменную? Являются ли эти фрагменты кода одной функцией? Является ли это единственной функцией - было бы лучше, если бы вы обеспечивали полное тело функции (без частей, которые не касаются объектов Level1) - необходимо понять структуру тела функции. Если это разные функции - та же опция для тела полного класса. –

+0

'shape [x] = lvl1.shapes [0];' Никогда не делайте этого. Никогда не вызывать какой-либо метод для объекта, не проверяя, является ли этот объект нулевым или нет; в противном случае вы получите исключение смертельного исхода - вот его исключение с нулевым указателем. В вашем случае 'lvl1' равно null. Читайте о 'stack',' local variables' в Java – spiderman

ответ

0

Кажется, я решил проблему сразу после публикации этого сообщения. Мне пришлось изменить Aray в классе lvl1 на Static. Тогда это работает.

0

Оказывается, что проблема здесь:

Level1 lvl1 = new Level1(); 

Вы инициализировать локальную переменную в конструкторе и в методе обновления вы обращаетесь к неинициализированной переменной экземпляра (lvl1.shapes[0]1), который бросает NullPointerException.

Изменить его:

lvl1 = new Level1(); 

, чтобы инициализировать переменную экземпляра.

Смежные вопросы