将paintComponent传递给另一个类错误

时间:2012-08-15 02:52:20

标签: java swing class graphics jpanel

我试图通过传递JPanel来让每个对象将自己绘制到{​​{1}}中,但我收到graphics错误。

java.lang.NullPointerException

然后此代码位于不同的.java文件中

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);
    }
}

有谁知道为什么这段代码不起作用?

它给了我:

import java.awt.Graphics;

public class Player {

    public Player() {

    }

    public void paintComponent(Graphics g) {

    }
}

2 个答案:

答案 0 :(得分:4)

您没有实例化mainPlayer。由于未实例化的对象引用变量的默认值为null,因此当您尝试取消引用变量时,第23行会出现NullPointerException。

答案 1 :(得分:2)

mainPlayer变量是导致问题的原因。您应该添加main方法,panel.mainPlayer = new Player(); 因为mainPlayer默认为null,所以你必须将它设置为某个对象的实例才能使用它并调用它的方法。