我正在制作游戏,但当我尝试启动它时,它说: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);
}
}
请告诉我,如果你知道如何修理它,我已经坚持了很长时间。
答案 0 :(得分:4)
Graphics g;
您的g
指向 null-reference 并且您在null上调用drawImage
,这导致NPE(NullPointerException
)。
g.drawImage(image, 500, 200, 124, 280, null);
上的本教程
答案 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()