2015-02-17 3 views
-3

Я попытался понять, что я сделал неправильно, но не могу найти, что не так. Когда я запускаю следующий код он вернетсяInt Null Pointer Exception

Exception in thread "main" java.lang.NullPointerException 
at jeremy.engine.Animation.displayFrames(Animation.java:43) 
at jeremy.engine.Animation.playNextFrame(Animation.java:54) 
at jeremy.engine.test.draw(test.java:33) 
at jeremy.engine.test.main(test.java:90) 

Проблемы швов быть с этим сегментом кода

public static boolean displayFrames() { 
    if (frame<frames.length+1) { 
     Disp.drawTexturedBox(x, y, width, height, frames[frame]); 
     return true; 
    } 
    return false; 
} 

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

public static double x = 0; 
public static double y = 0; 
public static double width = Disp.resX; 
public static double height = Disp.resY; 
private static Texture frames[] = null; 
+1

'Текстурные рамки []' определены дважды в вашем коде ... Это говорит о том, что вы не используете один и тот же экземпляр 'frames' в вашем методе' displayFrames', который вы использовали в 'loadFiles' – Smit

+0

Поскольку' frames' равно null. У вас есть локальная переменная 'frames' в' loadFiles', поэтому, когда вы пишете 'frames' внутри' loadFiles', это означает эту переменную, а не поле. Не создавайте две разные вещи с тем же именем, если это смущает вас. – immibis

+0

Я удалил второе определение, но у меня все еще есть такая же проблема – Je06

ответ

0

Глядя на эту функцию:

public static boolean displayFrames() { 
    if (frame<frames.length+1) { 
     Disp.drawTexturedBox(x, y, width, height, frames[frame]); 
     return true; 
    } 
    return false; 
} 

Проблема, как представляется, эта проверка: frame<frames.length+1

Последний индекс в массиве находится в frames.length - 1, не frames.length + 1.

Так это должно работать:

public static boolean displayFrames() { 
    if (frame < frames.length - 1) { 
     Disp.drawTexturedBox(x, y, width, height, frames[frame]); 
     return true; 
    } 
    return false; 
} 
+0

Я пробовал смену кода, но я все равно получаю ту же ошибку – Je06

1

Я предполагаю, что вы фактически никогда не инициализирует ваш frames[] массив. Вероятно, все равно, когда вы пытаетесь получить к нему доступ, позвоните по номеру frames.length.

+0

Это, кажется, проблема, но я не знаю, как ее исправить – Je06