Java 有关图形的空指针错误

Java 有关图形的空指针错误,java,swing,nullpointerexception,jpanel,paint,Java,Swing,Nullpointerexception,Jpanel,Paint,这都在我的Board类中,应该是一个我可以用来把东西画到屏幕上的类 private JFrame frame; private Pane pane; private Image img; private Graphics2D graphics; private Dimension screenSize; private Color backgroundColor; public Board() { screenSize = java.awt.Toolkit.getDefaultToo

这都在我的Board类中,应该是一个我可以用来把东西画到屏幕上的类

private JFrame frame;
private Pane pane;
private Image img;
private Graphics2D graphics;
private Dimension screenSize;
private Color backgroundColor;


public Board() {
    screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
    frame = new JFrame("2D Game Arcade");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    pane = new Pane();
    pane.setPreferredSize(screenSize);
    createMenus();
    frame.setContentPane(pane);
    backgroundColor = Color.WHITE;
    Dimension size = pane.getSize();
    img = pane.createImage(size.width, size.height);
    graphics = (Graphics2D) img.getGraphics();
    graphics.setColor(backgroundColor);
    graphics.fillRect(0, 0, size.width, size.height);
    frame.pack();
    frame.setVisible(true);
}
private class Pane extends JPanel {
    @Override
    public void paint(Graphics go) {
        Graphics2D g = (Graphics2D) go;
        g.drawImage(img, 0, 0, null);
    }
}
我的错误发生在这里:

graphics = (Graphics2D) img.getGraphics();
作为

关于使用graphics类是否有一些我不知道的规则? 我知道它是抽象的,不能像这样实例化:

graphics = new Graphics2D();

没有实现所有抽象方法(我不想这么做),但为什么这是一个空指针运行时错误?

快速扫描所有相关文档就可以提供答案

为什么
createImage
返回
null
?发件人:

如果组件不可显示,则返回值可能为
null

“不可显示”是什么意思?“请参阅”链接可能是一个提示。发件人:

将组件添加到可显示的包含层次结构或将其包含层次结构设置为可显示时,组件将被设置为可显示

“它的包含层次结构(要)可显示”意味着什么?下一句话是:

当一个包含层次结构的上级窗口被压缩或可见时,它就可以显示

因此,从文档中,我们可以得出结论,在打包父容器或使其可见之前,不应调用
createImage()


请不要将StackOverflow用作JDK文档的替代品。

错误行号就好了。我知道它是空的,我知道空指针异常是什么,但我想知道当我显式地将img定义为“img=pane.createImage(size.width,size.height);”时,为什么img是空的@Jason@Escap3faith当您查看文档时,您发现了什么?@hexafraction错误行位于块代码之后,但如果您计算行数,则错误行为第20行。@JasonC“如果组件不可显示,则返回值可能为null。”我理解这一点,但为什么img为null?我不知道如何更正它。“请不要使用StackOverflow作为JDK文档的替代品。”+10。
graphics = new Graphics2D();