gpt4 book ai didi

java - 为什么我的 BufferStrategy 抛出 NullpointerException 以及如何修复它?

转载 作者:行者123 更新时间:2023-11-30 06:33:30 25 4
gpt4 key购买 nike

我一直在尝试制作 3d 游戏,但由于某种原因,我的代码抛出 NullPointerException。我收到的错误是:

Exception in thread "Thread-3" 
java.lang.NullPointerException
at Display_3d.render(Display_3d.java:73)
at Display_3d.run(Display_3d.java:55)
at java.lang.Thread.run(Unknown Source)

这个程序应该只是显示随机颜色的像素作为测试,以便稍后制作 3D 图形。它还使用其他两个类,尽管这两个类不会抛出错误,但它们仍然可能是问题所在,所以我也会发布它们。下面的类是抛出错误的类

import java.awt.Canvas;
import javax.swing.JFrame;
import java.awt.image.BufferedImage;
import java.awt.image.BufferStrategy;
import java.awt.image.DataBufferInt;
import java.awt.Graphics;

public class Display_3d extends Canvas implements Runnable {
private static final long serialVersionUID = 1L;

public static final int width = 800;
public static final int height = 600;
public static final String title = "Scott's Game Pre-Alpha 0.01";

private Thread thread;
private Screen screen;
private BufferedImage img;
private boolean running = false;
private Render render;
private int[] pixels;

public Display_3d(){
Screen screen = new Screen(width,height);
img = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
pixels = ((DataBufferInt)img.getRaster().getDataBuffer()).getData();
}

private void start(){
if (running){
return;
}
running = true;
Thread thread = new Thread(this);
thread.start();

System.out.println("start() has been called sucessfully");
}

private void stop(){
if (true != running){
return;
}
running = false;
try {
thread.join();
}catch (Exception e){
e.printStackTrace();
System.exit(0);
}
}

public void run(){
while (running){
tick();
/*Line 55*/render();

}
}

private void tick(){

}

private void render(){
BufferStrategy bs = this.getBufferStrategy();
if (bs == null){
this.createBufferStrategy(3);

return;
}


/*Line 73*/ screen.render();

for (int i = 0; i<width*height-1; i++){
pixels[i] = screen.pixels[i];
}

Graphics g = bs.getDrawGraphics();
g.drawImage(img,0,0,width,height,null);
g.dispose();
bs.show();
}


public static void main(String[] args){
Display_3d game = new Display_3d();
JFrame frame = new JFrame();
frame.add(game);
frame.pack();
frame.setTitle(title);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(width,height);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
frame.setVisible(true);

System.out.println("Running...");

game.start();

}
}

我的渲染类

  public class Render{
public final int width;
public final int height;
public final int[] pixels;

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

public void draw(Render render, int xOffset, int yOffset){
for (int y = 0; y<render.height; y++){
int yPix = y + yOffset;

for (int x = 0; x<render.width; x++){
int xPix = x + xOffset;
pixels[xPix + yPix * width] = render.pixels[x+y * render.width];

}
}
}
public static void main (String[] args){}
}

我的屏幕类

 import java.util.Random;
public class Screen extends Render{
private Render test;

public Screen(int width, int height){
super(width,height);
Random random = new Random();
test = new Render(256,256);

for (int i = 0; i <256*256; i++){
test.pixels[i] = random.nextInt();
}
}

public void render() {
draw(test,0,0);
}

public static void main (String[] args){}
}

最佳答案

在构造函数中创建局部变量

public Display_3d(){
Screen screen = new Screen(width,height); //<-------------
img = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
pixels = ((DataBufferInt)img.getRaster().getDataBuffer()).getData();
}

而是分配给字段

public Display_3d(){
this.screen = new Screen(width,height); //<-------------
img = new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
pixels = ((DataBufferInt)img.getRaster().getDataBuffer()).getData();
}

关于java - 为什么我的 BufferStrategy 抛出 NullpointerException 以及如何修复它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45615413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com