我无法理解为什么它不起作用?
我有我的方法类:
package particles;
import org.newdawn.slick.Color;
import org.newdawn.slick.Graphics;
public class Methods {
Graphics g;
public void showhud(){
g.setColor(Color.white);
g.drawString("Screen: Game", 675, 10);
g.drawString("Version: 1.0", 675, 25);
}
}
但是当我尝试在我的其他课程中实现showhud()时,它不起作用!
这是我如何使用它:
package particles;
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;
import particles.Methods;
public class Game extends BasicGameState {
Methods m;
public void init(GameContainer container, StateBasedGame game) throws SlickException {
}
public void render(GameContainer container, StateBasedGame game, Graphics g) throws SlickException {
m.showhud();
}
public void update(GameContainer container, StateBasedGame game, int delta) throws SlickException {
}
public int getID() {
return 0;
}
}
我得到的错误是:
Tue Jan 01 17:19:36 NZDT 2013 ERROR:null
java.lang.NullPointerException
at particles.Game.render(Game.java:18)
at org.newdawn.slick.state.StateBasedGame.render(StateBasedGame.java:207)
at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:703)
at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:456)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:361)
at particles.Main.main(Main.java:23)
答案 0 :(得分:3)
您尚未初始化m
- 它(仍)null
,因此执行时
m.showhud();
您获得了NPE,因为m
是null
。
您必须将Methods
的实例分配给变量m
答案 1 :(得分:0)
您永远不会为g
分配引用。换句话说,代码中的任何位置都没有g = ...
。因此,当您的Methods
类被实例化时,g
会初始化为默认值,即null
。
答案 2 :(得分:0)
您尚未初始化Methods m
对象
根据您的代码,我相信int()
方法应初始化m object
答案 3 :(得分:0)
您可能需要实例化两个类成员引用, g 和 m 。目前,这两个引用都没有指向任何内容。它们必须分别指向Graphics和Methods对象。
如果可能,请将一个构造函数添加到Methods类中,该类将负责初始化 g 。
如果init()是Game(您的类)生命周期的开始,则在此状态/块中初始化 m 。