0

こんにちは私はいくつかのボタンを含むアプリケーションを作成しました。しかし、ボタンを押すと、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();
    }
}
}

たとえば、このボタンを押すと、すべての変数で例外が正しく発生します。これがどのように表示され、どのように解決するかを知っている人はいますか?

4

2 に答える 2

3

これ以上の情報がなければ、museum.checkInを呼び出そうとすると、museumオブジェクトがnullになり、nullpointerexceptionがトリガーされると思います。

コード博物館を見ることは間違いなくヌルです。コンストラクターには、次のものを含める必要があります。

this.museum = museum;

渡す博物館オブジェクトがnullでない場合、他のすべてが機能するはずです。

于 2012-12-10T22:24:56.563 に答える
2

museumコンストラクターに値を割り当てていないようですが、多くの場所で逆参照しています。あなたはこれをしたいでしょう:

this.museum = museum;

コンストラクターのどこかに。または、変数の名前を変更して、誤って を実行しないようにしますmuseum = museum。これは効果がありません。

于 2012-12-10T22:34:47.633 に答える