-1

当我运行我的代码时,我得到这个错误:

线程“主”java.lang.NullPointerException 中的异常

at Main.drawBlock(Main.java:48)
at Main.<init>(Main.java:43)
at Main.main(Main.java:58)

我认为这是因为我绘制的图形,但以前从未发生过。我不知道为什么。这是我的代码:

Graphics2D g;
static JFrame jf = new JFrame();
Image Air;
Image Grass;
Image icon;

public Main() {
    icon = new ImageIcon(this.getClass().getResource("Icon.png")).getImage();
    Grass = new ImageIcon(this.getClass().getResource("Grass.png")).getImage();
    Air = new ImageIcon(this.getClass().getResource("Air.png")).getImage();

    jf.setIconImage(icon);
    drawBlock(Air,0,0);

}

private void drawBlock(Image img, int x, int y) {
    g.drawImage(img,x,y,null);
}

public static void main(String[] args) {
    jf.setSize(792,528);
    jf.setLocationRelativeTo(null);
    jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
    jf.setVisible(true);
    jf.setTitle("Minecraft 2D Adventure");

    new Main();


}}
4

3 回答 3

2

因为你还没有初始化Graphics2D g所以 g 是null

is的真正原因NPEGraphics2DaAbstractClass并且您无法实例化它。

您可以创建实例的Graphics2D实例,如下所示

GraphicsEnvironment env =
        GraphicsEnvironment.getLocalGraphicsEnvironment();
 env.createGraphics(BufferedImage);

或者你可以使用createGraphics()FromBufferedImage

public Graphics2D createGraphics()
于 2012-09-05T13:03:44.377 回答
2

您没有分配任何东西给Graphics2D g,因此是 NPE。

有关该问题的更详细分析以及如何解决它的指示,请参阅 AmitD 的答案。

于 2012-09-05T13:02:32.740 回答
1

如果您不为分配的对象分配值,则其默认值为null. 因此,当您引用g.

于 2012-09-05T13:06:23.780 回答