java - graphics2D.drawImage() 上的异常
问题描述
当我使用下面的代码时,它会引发异常。但是当我添加:
graphics.drawString("some string", 0, 0);
对于渲染方法,一切正常我试图找到一些关于drawImage()
在绘制之前是否必须做任何事情但找不到的信息。你能告诉我发生了什么事吗?
这是创建窗口的游戏类
import javax.swing.JFrame;
public class Game{
public static void main(String[] args){
JFrame frame = new JFrame("Pong");
frame.add(new GamePanel());
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setResizable(false);
frame.pack();
frame.setVisible(true);
}
}
这是游戏面板
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
public class GamePanel extends JPanel implements Runnable{
//Fields
public static int WIDTH = 600;
public static int HEIGHT = 400;
private BufferedImage image;// = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
private Graphics2D graphics;
private Thread thread;
private boolean running;
public GamePanel(){
if(thread == null){ thread = new Thread(this); thread.start(); }
setPreferredSize(new Dimension(WIDTH, HEIGHT));
setFocusable(true);
requestFocusInWindow();
}
@Override
public void run(){
init();
while(running){
render();
draw();
}
}
private void init() {
running = true;
timer = System.nanoTime();
image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
graphics = image.createGraphics();
}
private void render() {
graphics.setColor(Color.BLACK);
graphics.fillRect(0, 0, WIDTH, HEIGHT);
}
private void draw(){
Graphics g = (Graphics) getGraphics();
if (image != null) g.drawImage(image, 0, 0, this);
g.dispose();
}
}
好的,所以我正在尝试使用“graphics2d”创建一个简单的游戏来了解它是如何工作的,并且我正在不停地循环调用 draw() 和 render() 方法。并且不添加graphics.drawSting("some string", x, y);
它会在第 85 行引发此异常,即g.drawImage(image, 0, 0, null);
Exception in thread "Thread-0" java.lang.NullPointerException
at GamePanel.draw(GamePanel.java:85)
at GamePanel.run(GamePanel.java:54)
at java.base/java.lang.Thread.run(Thread.java:832)
所以我调试了它并且没有添加方法drawString()
,render()
方法g
中的draw()
方法是 null 但是当我添加drawString()
到render()
方法时它不是 null 并且它绘制到窗口。
解决方案
你得到什么样的异常?要绘制图像,请在此处查看此链接。 https://docs.oracle.com/javase/tutorial/2d/images/drawimage.html 试试这个:
private void draw(){
Graphics g = (Graphics) getGraphics();
if (image != null)
g.drawImage(image, 0, 0, this);
g.dispose();
}
推荐阅读
- javascript - 关于 NodeJS 缓冲区
- excel - Excel:通过多个工作表进行相关的下拉计算(具有不同的列位置)
- jquery - 在 JSON 对象数组中查找具有某些值的项目并替换(如果存在)
- java - JMeter - 每个线程中的第一个样本很慢,问题每隔约 210 秒重复一次
- marklogic - 如何使用 MarkLogic 中的结构化查询从值列表中获取最大值(日期)
- docker-compose - 在 Win 10 上使用 Docker-Compose 构建 vlc-unity 时出错
- android - Android webview cookie不像chrome那样工作
- regex - 带有通配符搜索的正则表达式?
- jenkins - 如何在 Jenkins 管道中按 buildnumber 停止构建
- python - matplotlib 中的动画箭头