加载文件时出现NullPointerException错误

时间:2014-12-03 16:59:43

标签: java image swing jframe

我正在尝试为此游戏加载背景图片,该文件与类文件位于同一文件夹中,并且只有一个文件夹。我已经搜索了不同的方法来引用该文件,但都失败了。这是抛出的错误:

Exception in thread "main" java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(Unknown Source)
    at ThrustR.<init>(ThrustR.java:28)
    at ThrustR.main(ThrustR.java:35)

以下是代码:

public class ThrustR extends JFrame
{
    public String path;
    public File file;
    public BufferedImage image;

    public void setValues() throws IOException
    {
        path = "CityRed.jpg";
        file = new File(path);
        image = ImageIO.read(file);
    }

    public ThrustR(String title)
    {
        super(title);

        JLabel back = new JLabel(new ImageIcon(image));

    }

    public static void main(String[] args)
    {
        // Main Window
        ThrustR frame = new ThrustR("ThrustR");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(720,480);
        frame.setVisible(true);

    }   
}

3 个答案:

答案 0 :(得分:0)

尝试:

getClass().getResource("/CityRed.jpg")

答案 1 :(得分:0)

您没有从任何地方调用setValues()方法。

我能弄清楚的是,当程序的执行开始时,它转到main()方法,你正在创建类ThrustR frame = new ThrustR("ThrustR");的对象,它将调用它的构造函数,这是

public ThrustR(String title){
    super(title);
    JLabel back = new JLabel(new ImageIcon(image));
}

在此,您正在创建ImageIcon的另一个对象,即new ImageIcon(image),此时image将为空。到目前为止,setValues()尚未调用,默认情况下public BufferedImage image;将为空。

答案 2 :(得分:0)

您尚未调用setvalues()方法。我已经对您的代码进行了一些更改,并且可以尝试为我工作。

public class ThrustR extends JFrame {
//  public String path;
//    public File file;
//    public BufferedImage image;

//    public void setValues() 
//    {
    // path = "/CityRed.jpg";
    // file = new File(path);
    //image = ImageIO.read(file);
//    }
    public ThrustR(String title) throws IOException {
        super(title);
        String path = "CityRed.jpg";
        File file = new File(path);
        BufferedImage image = ImageIO.read(file);
        JLabel back = new JLabel(new ImageIcon(image));
        this.add(back);

    }

    public static void main(String[] args) throws IOException {
        // Main Window
        ThrustR frame = new ThrustR("ThrustR");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(720, 480);
        frame.setVisible(true);

    }
}