如何修复NullPointerException?

时间:2012-11-03 18:14:55

标签: java nullpointerexception

我正在制作游戏,但当我尝试启动它时,它说:java.lang.NullPointerException

以下是代码:

package com.shinxs.rain.graphics;

import java.awt.Graphics;
import java.awt.Image;
import java.util.Random;
import javax.swing.ImageIcon;

public class Screen {

    private int width, height;
    public int[] pixels;
    Graphics g;

    public int[] tiles = new int[64 * 64];

    private Random random = new Random();

    ImageIcon i = new ImageIcon("Resources/Inventory.png");
    Image image = i.getImage();

    public Screen(int width, int height) {
        this.width = width;
        this.height = height;
        pixels = new int[width * height];

        for (int i = 0; i < 64 * 64; i++) {
            tiles[i] = random.nextInt(0xFFFFFF);
        }
    }

    public void clear() {
        for (int i = 0; i < pixels.length; i++) {
            pixels[i] = 0;
        }       
    }

    public void render() {
        g.drawImage(image, 500, 200, 124, 280, null);
    }
}

请告诉我,如果你知道如何修理它,我已经坚持了很长时间。

3 个答案:

答案 0 :(得分:4)

 Graphics g;

您的g指向 null-reference 并且您在null上调用drawImage,这导致NPE(NullPointerException)。

g.drawImage(image, 500, 200, 124, 280, null);

请参阅how to use Graphics in java

上的本教程

答案 1 :(得分:1)

您的Graphics对象为null,因为您从不分配任何其他值。 Null表示对象为“空”且不包含任何数据,这是要初始化的对象的逻辑值。为了使用Graphics对象,您需要访问预先构建的对象,因为Graphics类没有公共构造函数(新的Graphics()不起作用)。我知道这样做的唯一方法是扩展javax.swing.JFrame并覆盖paint(Graphics g),其中预先实例化的Graphics对象作为参数传递。 Graphics对象由JFrame的内部工作方式创建。

   class Screen extends javax.swing.JFrame{

         public void paint(Graphics g){
                super.paint(g); //correctly draws background

                //now call methods on g, the graphics object
         }
   }

我强烈建议您查看有关Swing的文档,以了解有关其工作原理的更多信息。

答案 2 :(得分:0)

你从来没有初始化你的Graphics g;对象和调用方法, 你必须初始化你的Graphics对象,否则它是null,因为对象的默认值是 null

Graphics g= Griphics.create();

g.darwLine()