我正在用Java制作发票程序。我正在制作一个框架并链接到发票类。在Invoice-class中有一个名为hasInvoice(iNr)的方法。当我尝试检查发票编号是否已经存在时,我会得到一个Nullpointer。
public class FinancienAanmakenFrame extends JFrame implements ActionListener {
private JLabel nummer, soort, prijs, empty, totaal;
private JTextField tfnum;
protected JTextArea tasoort, taprijs;
protected JTextField tftotaal;
private JButton ok, terug, dienst;
private JPanel p;
private Financien deFinancien;
private Voorraad deVoorraad;
private FinancienAanmakenFrame deBon;
private FinancienWijzigenFrame deWijziging;
public FinancienAanmakenFrame(Financien f, Voorraad v) {
deFinancien = f;
deVoorraad = v;
deBon = this;
p = new JPanel();
add(p);
p.setLayout(new GridLayout(6, 2, 2, 2));
nummer = new JLabel("Factuur nummer: ");
p.add(nummer);
tfnum = new JTextField();
p.add(tfnum);
dienst = new JButton("Voeg betaling toe");
p.add(dienst);
dienst.addActionListener(this);
empty = new JLabel();
p.add(empty);
soort = new JLabel("Soort dienst:");
p.add(soort);
prijs = new JLabel("Kosten:");
p.add(prijs);
tasoort = new JTextArea(20, 10);
p.add(tasoort);
tasoort.setEditable(false);
taprijs = new JTextArea(20, 10);
p.add(taprijs);
taprijs.setEditable(false);
totaal = new JLabel("Totale kosten");
p.add(totaal);
tftotaal = new JTextField("0");
p.add(tftotaal);
tftotaal.setEditable(false);
terug = new JButton("Terug naar financien menu");
p.add(terug);
terug.addActionListener(this);
ok = new JButton("Maak factuur aan");
p.add(ok);
ok.addActionListener(this);
setSize(450, 300);
setLocationRelativeTo(null);
setDefaultCloseOperation(HIDE_ON_CLOSE);
}
public boolean allesGevuld() {
if ((tfnum.getText().length() > 0) && (tftotaal.getText().length() > 0)) {
return true;
} else {
return false;
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == terug) {
this.setVisible(false);
}
else if (e.getSource() == dienst) {
DienstFrame bf = new DienstFrame(deFinancien, deVoorraad, deBon,
deWijziging);
bf.setVisible(true);
}
else if (e.getSource() == ok) {
int fN = Integer.parseInt(tfnum.getText());
if (!deFinancien.heeftFactuur(fN) && allesGevuld()) {
Factuur nwF = new Factuur(fN);
if (nwF != null) {
if (deFinancien.voegFactuurToe(nwF)) {
JOptionPane.showMessageDialog(null,
"Factuur is toegevoegd", "Succes",
JOptionPane.PLAIN_MESSAGE);
dispose();
}
}
} else {
tfnum.setText("");
JOptionPane.showMessageDialog(null,
"Er bestaat al een factuur met dit nummer", "Mislukt",
JOptionPane.PLAIN_MESSAGE);
}
} else { // niet alle gegevens zijn ingevuld
JOptionPane.showMessageDialog(null, "Vul alle gegevens in",
"Mislukt", JOptionPane.PLAIN_MESSAGE);
}
}
}
答案 0 :(得分:1)
您声明deFinancien
变量如:
private Financien deFinancien;
但是你从未初始化变量,并尝试访问:
deFinancien.heeftFactuur(fN)
您尝试在构造函数中初始化相同的内容:
public FinancienAanmakenFrame(Financien f, Voorraad v) {
deFinancien = f;...
但是你再次传递相同的引用(而不是值):
new DienstFrame(deFinancien, deVoorraad, deBon,
deWijziging);
这就是它抛出空指针异常的原因。