Java 如何修复NullPointerException?

Java 如何修复NullPointerException?,java,nullpointerexception,Java,Nullpointerexception,我正在制作一个游戏,但当我试图启动它时,它说:java.lang.NullPointerException g.drawImage(image, 500, 200, 124, 280, null); 代码如下: package com.shinxs.rain.graphics; import java.awt.Graphics; import java.awt.Image; import java.util.Random; import javax.swing.ImageIcon; pub

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

g.drawImage(image, 500, 200, 124, 280, null);
代码如下:

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);
    }
}
package com.shinxs.rain.graphics;
导入java.awt.Graphics;
导入java.awt.Image;
导入java.util.Random;
导入javax.swing.ImageIcon;
公共类屏幕{
私人int宽度、高度;
公共整数[]像素;
图形g;
公共int[]tiles=新int[64*64];
私有随机=新随机();
ImageIcon i=新的ImageIcon(“Resources/Inventory.png”);
Image=i.getImage();
公共屏幕(整数宽度、整数高度){
这个。宽度=宽度;
高度=高度;
像素=新整数[宽度*高度];
对于(int i=0;i<64*64;i++){
tiles[i]=random.nextInt(0xFFFFFF);
}
}
公共空间清除(){
对于(int i=0;i
请告诉我,如果你知道如何修复它,我已经被困了很长时间了

 Graphics g;
您的
g
指向null引用,您正在null上调用
drawImage
,这将导致NPE(
NullPointerException


参见本教程,您从未初始化过图形g;对象及其调用方法, 您必须初始化图形对象,否则它将为null,因为对象的默认值为null


图形对象为空,因为您从未指定任何其他值。Null表示对象为“空”且不包含任何数据,这是要初始化的对象的逻辑值。为了使用图形对象,您需要访问预先制作的对象,因为图形类没有公共构造函数(new Graphics()不起作用)。我所知道的唯一方法是扩展javax.swing.JFrame并覆盖画图(Graphics g),其中预实例化的图形对象作为参数传递。图形对象由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的文档,以了解其工作原理。

首先,查找并研究异常回溯。它将告诉你你需要知道的大部分。请阅读一些java,比如对象属性的默认值……如果你有任何其他异常,请在这里发布stacktrace。
   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
         }
   }