从其他类实现方法

时间:2013-01-01 04:29:12

标签: java

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

我有我的方法类:

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 个答案:

答案 0 :(得分:3)

您尚未初始化m - 它(仍)null,因此执行时

m.showhud();

您获得了NPE,因为mnull

您必须将Methods的实例分配给变量m

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您尚未初始化Methods m对象

根据您的代码,我相信int()方法应初始化m object

答案 3 :(得分:0)

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

  1. 如果可能,请将一个构造函数添加到Methods类中,该类将负责初始化 g

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