Java 将paintComponent传递给另一个类时出错

Java 将paintComponent传递给另一个类时出错,java,swing,class,graphics,jpanel,Java,Swing,Class,Graphics,Jpanel,我试图让每个对象通过传递graphics将自己绘制到JPanel中,但是我得到了一个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 seria

我试图让每个对象通过传递
graphics
将自己绘制到
JPanel
中,但是我得到了一个
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)

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

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

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

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

让我们从以下事实开始:
mainPlayer
在您的代码示例中的任何地方都没有初始化。我现在感觉不太聪明……别担心,这发生在我们中最好的人身上。欢迎来到编程世界,在那里聪明的人会觉得自己很笨;)哈哈,我想我会喜欢这里的。让我们从以下事实开始:
mainPlayer
在你的代码中没有任何地方被初始化。例如,我现在觉得自己不是很聪明……别担心,这发生在我们当中最好的人身上。欢迎来到编程世界,聪明的人会觉得自己很笨;)哈哈,我想我会喜欢这里的。谢谢,很抱歉完全忘记了。谢谢,很抱歉完全忘记了我添加了mainPlayer=newplayer()并将其设置为静态。我添加了mainPlayer=newplayer()并将其设置为静态。