Java Slick2D getGraphics()返回null,出现null指针异常
我正在努力让我的slick2d游戏渲染,但是container.getGraphics()返回null,我得到一个null指针异常。我使用以下命令检查是否是getGraphics()返回null:Java Slick2D getGraphics()返回null,出现null指针异常,java,nullpointerexception,slick2d,Java,Nullpointerexception,Slick2d,我正在努力让我的slick2d游戏渲染,但是container.getGraphics()返回null,我得到一个null指针异常。我使用以下命令检查是否是getGraphics()返回null: if (container.getGraphics()==null) return; 这修复了npe,但是我当然不能渲染任何东西 堆栈跟踪: Tue Sep 02 21:42:19 MDT 2014 INFO:Slick Build #237 Exception in thread "Thread-
if (container.getGraphics()==null) return;
这修复了npe,但是我当然不能渲染任何东西
堆栈跟踪:
Tue Sep 02 21:42:19 MDT 2014 INFO:Slick Build #237
Exception in thread "Thread-1" java.lang.NullPointerException
at com.nonuniversal.client.MenuState.render(MenuState.java:17)
at org.newdawn.slick.state.StateBasedGame.render(StateBasedGame.java:199)
at com.nonuniversal.client.Game.run(Game.java:33)
at java.lang.Thread.run(Unknown Source)
请注意,LunaTopiClient在运行时需要用户名参数
import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.SlickException;
public class LunatopiaClient{
private String username;
AppGameContainer container;
Game game;
public LunatopiaClient(String username) {
this.username = username;
}
public static void main(String args[]) {
if (args.length!=1) {
System.out.println("Usage: java -jar <filename.jar> <username>");
return;
} else {
LunatopiaClient lunatopiaClient = new LunatopiaClient(args[0]);
lunatopiaClient.init();
}
}
public void init() {
try {
game = new Game("");
container = new AppGameContainer(game);
container.setFullscreen(true);
game.init(container);
game.init();
} catch (SlickException e) {
e.printStackTrace();
}
}
public Game getGame() {
return game;
}
public String getUsername() {
return username;
}
}
门努斯特类
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;
public class MenuState extends BasicGameState{
public void init(GameContainer container, StateBasedGame game)
throws SlickException {
}
public void render(GameContainer container, StateBasedGame game, Graphics g)
throws SlickException {
g.drawString("Hello World", 0, 0);
}
public void update(GameContainer container, StateBasedGame game, int arg)
throws SlickException {
}
public int getID() {
return 0;
}
}
编辑:拼写不幸的是,您在一个非常非正统的庄园中配置了大量代码。首先,Slick2d将自动执行程序的线程,因此您不需要自己编写线程 您似乎也在调用不存在的方法,例如在游戏中未定义init(容器)。此外,您将容器存储为不需要的数据值,因此您将获得图形上下文的NPE
如果你刚刚开始使用Slick2d,我建议你看看Newboston关于如何开始的视频教程。否则,我相信您可能必须重新启动您的项目,因为它在当前状态下不可用。希望这能有所帮助:)嘿,谢谢你的回答,我终于弄明白了,而且进展顺利!
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;
public class MenuState extends BasicGameState{
public void init(GameContainer container, StateBasedGame game)
throws SlickException {
}
public void render(GameContainer container, StateBasedGame game, Graphics g)
throws SlickException {
g.drawString("Hello World", 0, 0);
}
public void update(GameContainer container, StateBasedGame game, int arg)
throws SlickException {
}
public int getID() {
return 0;
}
}