gpt4 book ai didi

java - 使用关联时出现空指针

转载 作者:行者123 更新时间:2023-12-01 13:10:23 25 4
gpt4 key购买 nike

我正在用 Java 制作一个发票程序。我正在制作一个框架并链接到发票类。 Invoice 类中有一个名为 hasInvoice(iNr) 的方法。当我尝试检查发票号码是否已存在时,我得到一个空指针。

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);
}
}
}

最佳答案

您声明 deFinancien 变量,如下所示:

private Financien deFinancien;

但是您从未初始化该变量,并且您尝试访问:

deFinancien.heeftFactuur(fN)

您尝试在构造函数中初始化相同的内容:

public FinancienAanmakenFrame(Financien f, Voorraad v) {
deFinancien = f;...

但是您再次传递相同的引用(而不是值):

new DienstFrame(deFinancien, deVoorraad, deBon,
deWijziging);

这就是它抛出空指针异常的原因。

关于java - 使用关联时出现空指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22918704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com