Поместите немного базового кода в начало игры и столкнулись с этим неприятным 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, но не показать изображение, только пустой красный фон.