-1

我无法理解为什么它不起作用?

我有我的方法类:

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)
4

4 回答 4

3

你还没有初始化m- 它是 (still) null,所以当你执行

m.showhud();

你得到一个 NPE 因为mnull.

Methods您必须为变量分配一个实例m

于 2013-01-01T04:31:50.743 回答
0

您可能需要实例化两个类成员引用gm。目前,这两个引用都没有指向任何内容。它们必须分别指向 Graphics 和 Methods 对象。

  1. 如果可能,向 Methods 类添加一个构造函数,负责初始化g

  2. 如果 init() 是游戏(您的类)生命周期的开始,则在此状态/块中初始化m 。

于 2013-01-01T05:05:32.977 回答
0

您永远不会分配对g. 换句话说,您g = ...的代码中没有任何地方。因此,当您的Methods类被实例化时,g它被初始化为默认值,即null.

于 2013-01-01T04:31:49.310 回答
0

你还没有初始化Methods m对象

通过您的代码,我相信int()方法应该已经初始化m object

于 2013-01-01T04:32:43.377 回答