首页 > 解决方案 > 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 并且它绘制到窗口。

标签: javagraphics2ddrawimage

解决方案


你得到什么样的异常?要绘制图像,请在此处查看此链接。 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();
}

推荐阅读