NullPointerException при использовании drawImage (с Slick2d)

Поместите немного базового кода в начало игры и столкнулись с этим неприятным NullPointerException без видимой причины.

Loader.java (основной класс)

public class Loader extends StateBasedGame {
public static final int menu = 0;
public static final int ingame = 1;

public Loader() {
    super("insertGameName");
    this.addState(new Menu(menu));
    this.addState(new Ingame(ingame));

}

public static void main(String args[]) throws SlickException {

    AppGameContainer gameContainer = new AppGameContainer(new Loader());
    gameContainer.setDisplayMode(rpg.Settings.WIDTH, rpg.Settings.HEIGHT, false);
    gameContainer.setVSync(true);
    try {
        gameContainer.start();
    } catch (SlickException e) {
        e.printStackTrace();
    }
}

public void initStatesList(GameContainer arg0) throws SlickException {
    this.getState(0).init(arg0, this);
    // this.getState(1).init(arg0, this);
    this.enterState(menu);
}

}

и Menu.java (начальное состояние игры)

public class Menu extends BasicGameState {
Image logo;

public Menu(int menu) {
}

public void init(GameContainer arg0, StateBasedGame arg1) throws SlickException {
    logo = new Image("res/logo.png");
}

public void render(GameContainer arg0, StateBasedGame arg1, Graphics g) throws SlickException {
    g.setBackground(Color.red);
    g.drawImage(logo, 0, 0);
}

public void update(GameContainer arg0, StateBasedGame arg1, int arg2) throws SlickException {

}

public int getID() {

    return 0;
}

}

NullPointerException находится в Menu.java:23 (g.drawImage(logo, 0, 0); у меня сложилось впечатление, что весь этот код был выполнен правильно, поэтому я удивился, когда узнал обратное.

Боковое примечание: немного поработав с кодом, я обнаружил, что изменение «логотипа» в g.drawImage(logo,0,0) на «newImage("res/logo.png")' остановило исключение NullPointerException, но не показать изображение, только пустой красный фон.


person AnExoticllama    schedule 24.07.2014    source источник
comment
Где находится ваш logo.png в исходной папке/папке проекта?   -  person 0-4930-42390eo23o2e0-23oe0-23o    schedule 24.07.2014
comment
Название проекта — RPG v2, поэтому загрузчик — RPG v2/src/rpg/Loader.java, меню — RPG v2/src/rpg.states/Menu.java, а logo.png — RPG v2/res/logo.png.   -  person AnExoticllama    schedule 24.07.2014
comment
Я почти уверен, что ваше изображение имеет значение null при его рендеринге. Так что init, вероятно, не вызывается.   -  person flotothemoon    schedule 30.07.2014
comment
В чем ошибка? Включите полное сообщение.   -  person Anubian Noob    schedule 31.07.2014


Ответы (1)


твой метод

визуализация (GameContainer arg0, StateBasedGame arg1, Graphics g)

не получает никакого графического объекта, поэтому он дает исключение NullPointException, когда вы вызываете любой метод через g, потому что переменной присваивается нулевое значение.

узнайте, где вызывается этот метод, и проверьте правильность переданных аргументов.

person shubham    schedule 24.07.2014
comment
Неправильный. Метод рендеринга предоставляется самим состоянием игры, поэтому объект Graphics не равен нулю. - person flotothemoon; 30.07.2014