-2

我正在制作游戏,但是当我尝试启动它时,它说: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);
    }
}

如果您知道如何解决它,请告诉我,我已经坚持了很长时间。

4

3 回答 3

4
 Graphics g;

g指向空引用,并且您正在调用drawImage导致 NPE ( NullPointerException) 的空值。

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

请参阅本教程,了解如何在 java 中使用 Graphics

于 2012-11-03T18:16:10.237 回答
1

您的 Graphics 对象为空,因为您从未分配给任何其他值。Null 意味着一个对象是“空的”并且不包含数据,这是要初始化的对象的逻辑值。为了使用 Graphics 对象,您需要访问预制对象,因为 Graphics 类没有公共构造函数(new 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 的文档,以了解有关其工作原理的更多信息。

于 2012-11-03T18:30:29.110 回答
0

您从未初始化您的 Graphics g;object 并在其上调用方法,您必须初始化您的 Graphics 对象,否则它将为空,因为对象的默认值为null

Graphics g= Griphics.create();

g.darwLine()
于 2012-11-03T18:19:21.767 回答