2016-06-19 45 views
-3

我已經在另一個類中聲明瞭一個私有變量。但問題是,當我通過對象flappyBird時,它是空的。我需要做些什麼改變,所以不是?阻止NPE:從另一個類訪問私人對象

FlappyBird.java:對象在這裏創建

public class FlappyBird implements ActionListener, KeyListener, MouseListener 
{ 

    private static FlappyBird flappyBird; 

    public static void main(String[] args) 
     /* CREATE INSTANCE OF FLAPPBIRD() */ 
    { 
     flappyBird = new FlappyBird(); 
    } 

    public static FlappyBird getBird() { 
     return flappyBird; 
    } 

    public static void paint(Graphics phics) { 
     ... 
    } 

GraphicRenderer.java:訪問這裏

public class GraphicsRenderer extends JPanel 
    { 
     private static FlappyBird bird = new FlappyBird(); 

    public void paint(Graphics phics) 
    { 
     // Generate game graphics by calling paint() in FlappyBird. 
     bird.getBird(); 
     super.paint(phics); 
     bird.paint(phics); 
    } 
} 
+1

你知道沒人叫'getBird()'方法和你的'setBird' /其他部分是極其錯誤的,並沒有任何意義 – Li357

+0

@AndrewL是我不好,我沒有鍵入正確的 – Ben

回答

1

對象你的類是非常錯誤的。沒有吸氣劑,許多部件沒有意義。這是一個什麼樣的錯誤的代碼清單:

  • 沒有setter等等領域將始終是空

  • 出於某種原因,實例字段

  • 你不執行來自你實現的接口的方法。我不會在這裏解決,但你自己實現它

  • FlappyBird類沒有方法paint()。我也不會解決這個問題,因爲聽到你可以做你自己,你不提供有關該方法

這裏的任何細節有一些修正:

public class FlappyBird implements ActionListener, KeyListener, MouseListener { 

    private static FlappyBird flappyBird; 

    public FlappyBird(/* Some attributes to the bird */) { 
     /* Field = attribute */ 
    } 

    public static void main(String[] args) { 
     flappyBird = new FlappyBird(/* Constructor Args */); 
    } 

    public FlappyBird getBird() { 
     return flappyBird; 
    } 

    public void setBird(/* You decide the arguments */) { 
     /* Field = argument */ 
    } 
} 

我添加了一個構造函數,固定上面的代碼中添加了一個setter。構造函數如下所示:

FlappyBird fb = new FlappyBird(arguments); 

現在,在調用時,您需要實例化並調用構造函數。然後,您可以訪問這些方法。作爲一個實例,我在bfb中存儲了getBird()返回值。您可以擴展此代碼。

public class GraphicsRenderer extends JPanel { 

    public void paint(Graphics phics) { 
     FlappyBird fb = new FlappyBird(/*Args*/); 
     FlappyBird b = fb.getBird(); 
     fb.setBird(/*Args*/); 
    } 
} 
+0

嗨,我真的很感謝你試圖幫助我,而你的廣泛答案是。 1 quetsion,你是什麼意思「你沒有實現從你實現的接口的方法」? – Ben

+0

您可以實現ActionListener,KeyListener和MouseListener。我指出你需要從接口實現這些方法,比如'actionPerformed()'等。如果我確實幫忙了,請考慮接受:^) – Li357

+0

哦,我明白了。我只是將實現和其他一些東西留給了,因爲我認爲它沒有關係。我還沒有完全解決NPE問題,但我可以接受你的答案,因爲它看起來有很多幫助。 – Ben