您好我已经创建了一个包含多个按钮的应用程序。但是当我按下按钮时,我得到了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();
}
}
}
当按下此按钮时,我会正确获取每个变量的异常。有人知道这是怎么出现的以及如何解决它?
答案 0 :(得分:3)
如果没有进一步的信息,我会假设博物馆对象为null,当您尝试调用museum.checkIn时会触发nullpointerexception。
查看守则博物馆绝对是空的。在构造函数中,您应该包括:
this.museum = museum;
假设您传入的博物馆对象不为空,那么其他一切都应该有用。
答案 1 :(得分:2)
您似乎没有在构造函数中为museum
赋值,但是您在很多地方取消引用它。你想要这样做:
this.museum = museum;
你的构造函数中的某个地方。或者,重命名变量,这样您就不会意外地执行museum = museum
,这将无效。