当字段不为null时抛出nullpointerexception

时间:2012-12-10 22:22:44

标签: java nullpointerexception

您好我已经创建了一个包含多个按钮的应用程序。但是当我按下按钮时,我得到了NullPointerException。这里奇怪的是没有任何东西是空的(null)

这里有一个代码示例

public class MuseumPanel extends JPanel implements ActionListener {

private JTextField kaartnummer;
private JTextField uur, minuut;
private JButton aankomst, vertrek, overzicht, sluiting;

private int hour;
private int minute;
private final int REFRESH = 1000;

MuseumRegistratie museum;

public MuseumPanel(MuseumRegistratie museum) {
    // zorg ervoor dat de huidige tijd wordt opgehaald.
    javax.swing.Timer timer = new javax.swing.Timer(REFRESH, this);
    timer.start();

    kaartnummer = new JTextField(15);
    uur = new JTextField(2);
    minuut = new JTextField(2);
    aankomst = new JButton("Komt binnen");
    aankomst.addActionListener(this);
    vertrek = new JButton("Vertrekt");
    vertrek.addActionListener(this);
    overzicht = new JButton("aantal aanwezig");
    overzicht.addActionListener(this);
    sluiting = new JButton("sluiting");
    sluiting.addActionListener(this);

    add(new JLabel("Kaartnummer"));
    add(kaartnummer);
    add(new JLabel("tijdstip van aankomst of vertrek "));
    add(uur);
    add(new JLabel(" uur en "));
    add(minuut);
    add(new JLabel(" minuten"));
    add(aankomst);
    add(vertrek);
    add(overzicht);
    add(sluiting);
}

@Override
public void actionPerformed(ActionEvent e) {
    Calendar now = Calendar.getInstance();
    hour = now.get(Calendar.HOUR_OF_DAY);
    minute = now.get(Calendar.MINUTE);

    uur.setText("" + hour);
    minuut.setText("" + minute);

    // aankomst
    if(e.getSource() == aankomst) {
        try {

            museum.checkIn(kaartnummer.getText(), hour, minute);
        } catch (NullPointerException ex) {

            System.out.println("cardnumber: " + kaartnummer.getText() + " hour " + hour + " minute " + minute);
        }
    }
    // vertrek
    if(e.getSource() == vertrek) {
        museum.checkOut(kaartnummer.getText(), hour, minute);
    }
    // overzicht
    if(e.getSource() == overzicht) {
        museum.getAantalAanwezig();
    }
    // sluiting
    if(e.getSource() == sluiting) {
        museum.sluitRegistratie();
    }
}
}

当按下此按钮时,我会正确获取每个变量的异常。有人知道这是怎么出现的以及如何解决它?

2 个答案:

答案 0 :(得分:3)

如果没有进一步的信息,我会假设博物馆对象为null,当您尝试调用museum.checkIn时会触发nullpointerexception。

查看守则博物馆绝对是空的。在构造函数中,您应该包括:

this.museum = museum;

假设您传入的博物馆对象不为空,那么其他一切都应该有用。

答案 1 :(得分:2)

您似乎没有在构造函数中为museum赋值,但是您在很多地方取消引用它。你想要这样做:

this.museum = museum;

你的构造函数中的某个地方。或者,重命名变量,这样您就不会意外地执行museum = museum,这将无效。