当我尝试运行JFrame时,为什么会出现NullPointerException?

时间:2013-07-03 16:19:22

标签: java nullpointerexception jframe instance

我知道这很简单,但是因为我已经实例化了这个类,所以我无法理解为什么我会遇到这个异常:

线程“main”中的异常java.lang.NullPointerException

在javax.swing.ImageIcon。(ImageIcon.java:181)

在GameFrame。(GameFrame.java:16)

在GameFrame.main(GameFrame.java:88)

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class GameFrame extends JFrame implements ActionListener{
    //Mini games and main panel components
    private JPanel MainPanel;
    private JPanel gamePanel1, gamePanel2, gamePanel3, gamePanel4, gamePanel5, gamePanel6, gamePanel7, gamePanel8, gamePanel9;
    private JPanel[] gamePanels = {gamePanel1, gamePanel2, gamePanel3, gamePanel4, gamePanel5, gamePanel6, gamePanel7, gamePanel8, gamePanel9};
    private JButton[][] buttons;
    private int turn;

    //X and O images
    private JLabel X = new JLabel();
    private ImageIcon x = new ImageIcon(getClass().getResource("/Images/X.PNG"));   
    private JLabel O = new JLabel();
    private ImageIcon o = new ImageIcon(getClass().getResource("/Images/O.PNG"));


    //constructor       
    public GameFrame() {
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        pack();
        //gf.setSize(800,600);
        setVisible(true);

        setUpMainPanel();
        add(MainPanel);
    }

    public void setUpMainPanel() {
        //sets the layout
    }


    public static void main(String[] args) {
        GameFrame frame = new GameFrame();
    }
}

我已尝试在main()中执行所有构造函数(例如setVisible(true)),但我得到了相同的错误。令人惊讶的是,关于这一点,没有很多容易找到的信息。为什么imageIcon会给它一个问题?谢谢你的帮助!

5 个答案:

答案 0 :(得分:4)

我的猜测是你的应用程序无法找到图片。

可以添加

吗?
System.out.println(getClass().getResource("/Images/X.PNG"));

并显示结果?我猜结果将打印'null'。如果是这样,图像的位置是不正确的,例如,前导斜杠可能是错误的,或者介意文件或路径的外壳。

答案 1 :(得分:0)

您可以尝试以下

   BufferedImage image = ImageIO.read(getClass().getResource("/Images/X.PNG"));
   if(image != null)
       ImageIcon x = new ImageIcon(image);

答案 2 :(得分:0)

   //X and O images
   private JLabel X = new JLabel();
   //try changing these around; EX:
   private ImageIcon x = new ImageIcon(getClass().getResource("X.PNG"));   
   private ImageIcon x = new ImageIcon(getClass().getResource("Images/X.PNG"));   
   private JLabel O = new JLabel();
   private ImageIcon o = new ImageIcon(getClass().getResource("previousFolder/Images/O.PNG"));

答案 3 :(得分:0)

此“/Images/X.PNG”位置没有图像。将图像“X.PNG”放在/ Images目录

答案 4 :(得分:0)

我最终放置了

X = new JLabel();
x = new ImageIcon(getClass().getResource("/Images/X.PNG"));

O = new JLabel();
o = new ImageIcon(getClass().getResource("/Images/O.PNG"));

中的

public void actionPerformed(ActionEvent e) {