java - getGraphics() 上的空指针异常

标签 java swing nullpointerexception draw bufferedimage

我的应用程序看起来像这样,我在 draw() 方法中遇到空指针异常,准确地说是在 g.drawImage(img, 0, 0, null) 处

package com.ochs.game;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class Game extends JPanel implements Runnable{
private static final long serialVersionUID = 8229934361462702491L;

public static final int WIDTH = 320;
public static final int HEIGHT = 240;
public static final int SCALE = 2;

public boolean isRunning;

private BufferedImage img;
private Graphics2D g2d;

public Game() {
    setFocusable(true);
    requestFocus();
    start();
}

public void start() {
    isRunning = true;
    new Thread(this).start();
}

public void stop() {
    isRunning = false;
}

public void run() {
    long start;
    init();
    while(isRunning) {
        start = System.currentTimeMillis();

        update();
        render();
        draw();

        try {
            Thread.sleep(5 - (System.currentTimeMillis() - start));
        } catch (Exception e) {
        }
    }
}

public void init() {
    img = new BufferedImage(WIDTH*SCALE, HEIGHT*SCALE, BufferedImage.TYPE_INT_RGB);
    g2d = (Graphics2D) img.getGraphics();
}

public void update() {

}

public void render() {

}

public void draw() {
    Graphics g = getGraphics();
    g.drawImage(img, 0, 0, null);    // <<<<< getting null pointer here!
}

public static void main(String[] args) {
    Dimension size = new Dimension(WIDTH*SCALE, HEIGHT*SCALE);
    Game gameComponent = new Game();
    JFrame frame = new JFrame();
    frame.setVisible(true);
    frame.setSize(size);
    frame.setLocationRelativeTo(null);
    frame.setResizable(false);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(gameComponent);
}
}

现在我的问题是:为什么在尝试绘制名为 img 的缓冲图像时会出现空指针异常?我还尝试使用 drawString() 输出一些字符串,但这也给了我自己一个 nullpointerexception。 有人有建议吗?

最佳答案

您可能试图在呈现 JPanel 之前通过 getGraphics() 获取 Graphics 上下文,因此该方法返回 null。不要这样做。在组件上使用 getGraphics() 获取 Graphics 上下文存在问题,其中之一是您在上面看到的问题,另一个是获取的 Graphics 上下文不会持久存在。有时需要这样做,但通常我们通过 paintComponent(...) 进行被动绘制。通常可以将 Swing 计时器用于动画循环。

关于java - getGraphics() 上的空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18171825/

相关文章:

java - java中简单的空检查时出现NullPointerException

java - 在 BST 中插入元素时出现 NullPointerException

java - 使用 maven 存储库将 java 库添加到 Android Studio 项目

java - JFrame 中的图像图标

java - Swing 如何处理对同一组件的连续更改?

java - 如何使图像在 Swing 时可拉伸(stretch)?

java - 线程异常,java.lang.NullPointerException

java - 多次返回的递归混淆

java - 如何在 android 中从 Styles.xml 设置字体

java - 如何在java中使用同一个套接字连接进行多个http请求?