为什么我不能getImage()?

时间:2013-08-07 03:38:43

标签: java swing nullpointerexception imageicon

我在从另一个类获取图像时遇到了一些问题。我之前从未遇到过这个问题。有人可以指出我正确的方向。

package main;

import java.awt.Color;
import java.awt.DisplayMode;
import java.awt.Graphics;
import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import java.awt.Image;

import javax.swing.ImageIcon;
import javax.swing.JFrame;

public class Main extends JFrame {

    public static Character character;

    static GraphicsEnvironment graphicsEnvironment;
    static GraphicsDevice graphicsDevice;
    static DisplayMode displayMode;

    private Image i;

    public static void main(String[] args) {
        displayMode = new DisplayMode(1280, 720, 16, DisplayMode.REFRESH_RATE_UNKNOWN);
        graphicsEnvironment = GraphicsEnvironment.getLocalGraphicsEnvironment();
        graphicsDevice = graphicsEnvironment.getDefaultScreenDevice();

        Main m = new Main();
        m.run();
    }

    public void run() {
        setUndecorated(true);
        setResizable(false);

        graphicsDevice.setFullScreenWindow(this);

        try {
            graphicsDevice.setDisplayMode(displayMode);
        } catch (Exception e) {
        }
    }

    public void paint(Graphics g) {
        g.setColor(Color.cyan);
        g.fillRect(0, 0, displayMode.getWidth(), displayMode.getHeight());
        i = character.getImage();
        g.drawImage(i, 100, 100, this);
    }
}

package main;

import java.awt.Image;
import javax.swing.ImageIcon;

public class Character {
    private Image i;

    public Image getImage() {
        i = new ImageIcon(this.getClass().getResource("/raw/images/player1.png")).getImage();
        return i;
    }
}

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at main.Main.paint(Main.java:52)

它表示错误为i = character.getImage();

我在制作applet时已经做了很多次,这是我第一次尝试全屏游戏时

2 个答案:

答案 0 :(得分:4)

记得考虑编译器告诉你的内容。

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException

NullPointerException意味着尚未初始化引用变量(或者== null就此而言)。在你的情况下,这意味着调试它你必须检查我和字符。如果是您试图返回的图像,则堆栈跟踪将更深入。

由于您正在初始化i,请回顾一下角色。你永远不会将角色设置为任何东西,这意味着你不能在任何声明中使用它。

因此,您的解决方案是character = new Character();run()中的main(String[] args), 或者您可以将getImage()设置为静态,并说出i = Character.getImage();

答案 1 :(得分:2)

  1. 将方法声明更改为 public static Image getImage(){/ * your code here * /}
  2. 调用该方法的语句确保第一个字母是大写的C而不是c。与在Character.getImage()
  3. 中一样