- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在尝试制作 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/
从Canvas可以看出类和 JFrame类,与BufferStrategy(Canvas 和JFrame)相关的方法不来自同一个父类。例如 JFrame 的 createBufferStrategy
经过几个小时的尝试解决这个问题后,我被难住了。我对 Java 有点陌生,可以使用一些帮助。 堆栈跟踪: java.lang.IllegalStateException: Component must
我尝试使用graphics2D和JFrame在Java中制作一个简单的GUI。我在 JFrame 上添加了背景颜色,在 initWindow() 方法中输入 this.setBackground(ne
我试图了解 BufferStrategy 是如何工作的。我制作了一个简单的应用程序,每 60 帧每秒一次又一次地绘制一些 Sprite 对象。我可以看到 Canvas 上的图像,但由于某种原因它们在闪
我正在尝试使用 JFrame 和 canvas 为游戏构建简单的 gui。 Window 是一个扩展 JFrame 类的类,我使用 fillRect 方法来填充黑色矩形。每次我运行程序时,框架窗口都不
首先,我知道以前曾有人问过类似的问题,但似乎没有答案可以解决我的问题。 我正在开发一个小游戏,由于某种原因,每当我尝试创建新的缓冲区策略时,java都会返回IllegalStateException。
我的桌面应用程序滞后。我认为 java.awt.image.BufferStrategy 中有问题。 private void render() { BufferStrategy bs
我是 java 的新手。我想做一个游戏。经过大量研究,我无法理解 bufferstrategy 是如何工作的。我知道基础知识..它创建了一个屏幕外图像,您可以稍后将其放入您的 Windows 对象中.
我用 BufferStrategy 等初始化一个扩展的 jFrame,在屏幕上得到一个漂亮的动画圆圈。我设置了一个关键监听器(在更新绘制线程之外),它告诉更新绘制线程在全屏独占模式之间切换,在更改完成
你好, 我尝试在 BufferStrategy 上使用其 Graphics 绘制图片。图片有透明背景,如果我在屏幕上绘制它,透明区域会变成黑色。 蓝色的东西是我想画的图像,但没有黑色部分(在原始图片中
当我试图弄清楚如何使用缓冲策略时,总体上只是改进我编写代码和清理东西的方式。当我运行以下代码时,在“createBufferStrategy(3)” 时出现错误 package Game1Te
所以我正在制作一个游戏,并且我的主游戏应用程序运行良好。问题是,当我尝试通过菜单(例如使用按钮 ActionEvent)启动游戏时,我的游戏似乎无法检测到提供给它的 KeyEvent。所以我决定制作一
我有一个 JFrame,我在其中添加了一个 JPanel。我正在做一些动画,所以我实现了 BufferStrategy 来进行渲染。我还有一个渲染循环,以使其在运行时保持渲染。 如果我像平常一样运行程
我是 Java 初学者,在扩展 JPanel 但不扩展 canvas 的类中创建 bufferstaregy 时遇到困难。有人可以在这里展示如何添加缓冲策略吗?我编写了非常简化的代码来说明我的问题。我
BufferStrategy 是 AWT 的一部分,通常与 Canvas 类一起使用,但它是否也可以与 Swing UI 结合使用而不会导致任何窗口显示问题,或者在这种情况下我应该更好地使用纯 AWT
我正在尝试使用 Java2D 制作一个简单的游戏以获得最大的兼容性。它在 Mac OS X Yosemite 上的 Java 8 下工作得很好,但当我在 Windows 7 下尝试相同的代码时,它就不
所以我最近一直在做一个小游戏,但遇到了一个奇怪的问题。虽然游戏在我不使用时运行得非常完美game.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE
Graphics g = bs.getDrawGraphics(); g.setColor(Color.BLACK); g.fillRect(0, 0, getWidth(), getHeight()
我正在尝试使用 BufferStrategy 和 Graphics2D 渲染图像。代码运行良好,但图像闪烁。在我用 Graphics2D 测试它之前,我只尝试了 Graphics,并且 Frame 疯
这个问题已经有答案了: What is a NullPointerException, and how do I fix it? (12 个回答) 已关闭 5 年前。 我一直在尝试制作 3d 游戏,但
我是一名优秀的程序员,十分优秀!