【问题标题】:Passing paintComponent to another class error将paintComponent传递给另一个类错误
【发布时间】:2012-08-15 02:52:19
【问题描述】:

我试图通过传递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 在您的代码示例中的任何地方都没有初始化的事实开始
  • 我现在感觉不太聪明……
  • 别担心,这发生在我们最好的人身上。
  • 欢迎来到编程的世界,聪明的人会觉得自己很笨;)
  • 哈哈,我想我会喜欢这里的。

标签: java swing class graphics jpanel


【解决方案1】:

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

【讨论】:

  • 谢谢,抱歉完全忘记了
【解决方案2】:

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

【讨论】:

  • 我添加了 mainPlayer = new Player() 并将其设为静态。
猜你喜欢
  • 2018-08-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-24
  • 2013-12-10
  • 2013-07-24
  • 2011-03-15
  • 1970-01-01
相关资源
最近更新 更多