1

我试图让每个对象JPanel通过传递将自己绘制成 ,graphics但我遇到了一个java.lang.NullPointerException错误。

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)
4

2 回答 2

4

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

于 2012-08-15T03:00:30.737 回答
2

mainPlayer 变量是导致您出现问题的原因。您应该在您的主要方法中添加 panel.mainPlayer = new Player(); 由于 mainPlayer 默认为 null,因此您必须将其设置为对象的某个实例才能使用它并调用其方法。

于 2012-08-15T03:21:48.090 回答