簡體   English   中英

實現其他類的方法

[英]Implementing methods from other classes

我不明白為什么它不起作用?

我有我的方法類:

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)

您尚未初始化m (仍然)為null ,因此在執行時

m.showhud();

您將獲得NPE,因為mnull

您必須將Methods的實例分配給變量m

您永遠不會為g指定引用。 換句話說,在代碼的任何地方都沒有g = ... 這樣,在實例化Methods類時,將g初始化為默認值null

您尚未初始化Methods m對象

通過您的代碼,我相信int()方法應該已經初始化了m object

您可能需要實例化兩個類成員引用gm 當前,兩個參考文獻都沒有指向任何對象。 它們必須分別指向Graphics和Methods對象。

  1. 如果可能,請向Methods類添加一個構造函數,該構造函數將負責初始化g

  2. 如果init()是Game(您的類)生命周期的開始,則在此狀態/塊中初始化m

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM