2014-03-19 38 views
0

爲了保持我的代碼「整潔」併爲了學習,我有一個包含7個類文件(當前)的應用程序。兩個擴展活動(Main.class & Game.class)。 我已經在這個問題上工作了幾天,看到了我認爲的很多不同的解決方案,但尚未得到一個工作。正確使用其他類文件的方法

我的問題是:我如何能夠從另一個類中使用方法而不會從下面的代碼中獲得NullPointerException錯誤?

(從Main.class代碼)

public Game Ga = new Game(); 

public Game Ga; 

都給予同樣的結果,我也嘗試:

public Game Ga = ((Game)getApplicationContext()); 

我的問題是,我使用Eclipse並且能夠開始編寫Ga. Eclipse會找到Game.class文件並列出我的m來自Game.class的方法。但是,在嘗試運行帶有Logcat:NullPointerException錯誤的Ga。方法時,一旦編譯應用程序崩潰。

我對Java/Android還很新,但是我的調試經驗讓我相信Ga變量是不正確的。

編輯:

Main.class

public class Main extends Activity { 

public Game Ga; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    // for testing 
    setContentView(R.layout.main); 
    playerOne = 1; 
    aiRandom(); 
    Ga.gameNew(); 

Game.class

public class Game extends Activity { 

public void gameNew() { 
    gameReset(); 
    fight(); 
+0

發佈的遊戲代碼和錯誤堆棧跟蹤 – Salah

回答

2

變量名不是問題。

比方說,你是─聲明

public Game Ga; 

這時嘎是默認。它沒有被實例化。所以,如果你的遊戲類有一個名爲getScreenWidth方法返回一個浮點值,你可以訪問它在那裏嘎被宣佈,和tried-

float screenWidth = Ga.getScreenWidth(); 

上述會給你NPE(NullPointerException異常),因爲Ga從未被實例化。但以下應該工作,除非別的東西是錯誤在這種情況下,你應該在你的遊戲類的代碼或你想調用的方法和準確的錯誤更新的問題日誌 -

Game Ga = new Game(); 
float screenWidth = Ga.getScreenWidth(); 

UPDATE

當你展示了一些代碼,你沒有實例化你的Ga。初始化它的onCreate裏面方法 -

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    Ga = new Game(); 

    ...the rest of your code.. 
} 

的變化特徵

public class Game extends Activity 

到 -

public class Game 
+0

謝謝你這個工程。目前編輯我的文件和新手問題:我是否需要將'Ga = new Game();'寫入現在使用的每種方法?我會不能保持它'全球'? – TomFirth

+1

@ TomFirth84你的ga已經是一個實例變量。所以,你不需要再次實例化使用Ga可以在同一個類中調用的任何方法。你可能想閱讀這個 - http://www.artima.com/objectsandjava/webuscript/PolymorphismInterfaces1.html –

0

如果遊戲是一種活動類的子類,而你正試圖從另一個調用活動的方法(主) - 你做錯了什麼。 您可以將此方法聲明爲靜態,並像這樣調用它:Game.someStaticMethod();