这都在我的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();
作为
Exception in thread "main" java.lang.NullPointerException
是否有一些关于使用我不知道的图形类的规则? 我知道它的抽象和不能像这样实例化:
graphics = new Graphics2D();
没有实现我不想做的所有抽象方法,但为什么这是一个空指针运行时错误?
答案 0 :(得分:3)
快速扫描所有相关文档即可提供答案。
为什么createImage
会返回null
?来自JPanel.createImage(int,int)
:
如果组件不可显示,则返回值可能为
null
。
什么"不可显示"意思? "另见"链接可能是一个提示。来自Component.isDisplayable()
:
当组件添加到可显示的包含层次结构中或当其包含层次结构可显示时,该组件可显示。
对于"它的遏制等级[可]是否可以显示"?那么下一句话就是:
当包含层次结构打包或可见时,可以显示包含层次结构。
因此,从文档中我们可以得出结论,在您打包或使父容器可见之前,不应该调用createImage()
。
请不要使用StackOverflow代替JDK文档。