显示java.lang.NullPointerException

时间:2015-03-24 05:37:51

标签: java swing runtime-error

我正在为类编写java代码,当我尝试运行代码时出现此错误。 错误消息是

"Exception in thread "main" java.lang.NullPointerException
at javax.swing.ImageIcon.<init>(Unknown Source)
at MemoControl.<init>(MemoControl.java:27)
at MemoControl.main(MemoControl.java:76)"

作业是

&#34;使用Swing编写卡片匹配游戏的图形版本。你的程序应该有4行5列&#34;卡&#34;一边是空白而另一边是数字。通过点击两张翻过来的牌来玩游戏。如果匹配,它们将保持可见。如果他们不这样做,他们会面朝下翻转。你的程序应该有一个&#34;继续&#34;翻转两张不匹配牌的按钮和一个显示游戏开始后秒数的计时器。&#34;

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

public class MemoControl extends JFrame {

public JLabel label;
public JButton button;

// images
public ImageIcon image1;
public JLabel label1;
public ImageIcon image2;
public JLabel label2;
public ImageIcon image3;
public JLabel label3;
public ImageIcon image4;
public JLabel label4;
public ImageIcon image5;
public JLabel label5;

public MemoControl() {

    setLayout(new FlowLayout());

    image1 = new ImageIcon(getClass().getResource("card_cover1.jpg"));
    label1 = new JLabel(image1);
    add(label1);

    image2 = new ImageIcon(getClass().getResource("card_cover1.jpg"));
    label2 = new JLabel(image2);
    add(label2);

    image3 = new ImageIcon(getClass().getResource("card_cover1.jpg"));
    label3 = new JLabel(image3);
    add(label3);

    image4 = new ImageIcon(getClass().getResource("card_cover1.jpg"));
    label4 = new JLabel(image4);
    add(label4);

    image5 = new ImageIcon(getClass().getResource("card_cover1.jpg"));
    label5 = new JLabel(image5);
    add(label5);

    /*
     * label = new JLabel("Welcome to AMY Memo Game"); add(label);
     */

    /*
     * textField = new JTextField(15); add(textField);
     */

    button = new JButton("Flip");
    add(button);

    EventClass event = new EventClass();
    button.addActionListener(event);

}// MyMemo constr end

private class EventClass implements ActionListener {

    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == button) {
            image1 = new ImageIcon(getClass().getResource("deer_card.jpg"));
            label1 = new JLabel(image1);
        }

    }
}// Event class end

public static void main(String args[]) {

    MemoControl gui = new MemoControl();

    gui.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    gui.pack();
    gui.setVisible(true);
    gui.setTitle("My Memo");

}// main end

}// AMYMemo class end

2 个答案:

答案 0 :(得分:0)

您可以将新的ImageIcon(getClass()。getResource(&#34; card_cover1.jpg&#34;))修改为新的ImageIcon(&#34; card_cover1.jpg&#34;),试一试!因为card_cover1.jpg是一个文件,而不是一个路径;你的方法getClass()。getResource()需要返回URL。

答案 1 :(得分:0)

是的,这个图像必须在你的类包中。如果这些图像在资源文件夹中,那么使用getClass()。getClassLoader()。getResource(&#34; res / card_cover1.jpg&#34;)