2012-08-15 15 views
1

我試圖通過傳遞graphics來讓每個對象自己進入JPanel,但我得到的錯誤是java.lang.NullPointerException將paintComponent傳遞給另一個類錯誤

import java.awt.Color; 
import java.awt.Graphics; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class Main extends JPanel { 

    private static final long serialVersionUID = 1L; 
    Main panel; 
    Player mainPlayer; 

    public static void main(String[] args) { 
     JFrame frame = new JFrame("Asteroids"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     Main panel = new Main(); 
     frame.add(panel); 
    frame.setBackground(Color.BLACK); 
     frame.setSize(500, 400); 
     frame.setVisible(true); 
    } 

    public void paintComponent(Graphics g) { 
     mainPlayer.paintComponent(g); 
    } 
} 

然後這個代碼是在不同的java文件

import java.awt.Graphics; 

public class Player { 

    public Player() { 

    } 

    public void paintComponent(Graphics g) { 

    } 
} 

有誰知道爲什麼這個代碼不工作?

它給我:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at Main.paintComponent(Main.java:23) 
+0

讓我們從'mainPlayer'沒有initalised這個事實開始吧,在你的代碼示例的任何地方 – MadProgrammer 2012-08-15 03:00:49

+0

我現在不覺得很聰明...... – semicolon 2012-08-15 03:20:18

+0

不要擔心,它發生在我們身上。 – axl 2012-08-15 03:22:30

回答

4

您還沒有實例mainPlayer。由於默認值對於未實例化的對象引用變量爲空,因此在嘗試取消引用該變量時,會在第23行中收到NullPointerException。

+0

謝謝,遺憾的是,我完全忘記了 – semicolon 2012-08-15 04:02:23

2

mainPlayer變量是什麼導致你的問題。你應該添加你的主要方法,panel.mainPlayer = new Player(); 由於mainPlayer默認爲null,您必須將其設置爲某個對象的某個實例才能使用它並調用其方法。

+0

我添加了mainPlayer = new Player()並將其設爲靜態。 – semicolon 2012-08-15 04:31:40