gpt4 book ai didi

Java:用对象填充 JComboBox

转载 作者:行者123 更新时间:2023-12-02 07:31:33 25 4
gpt4 key购买 nike

我正在尝试用对象填充 jComboBox。我让它在一个类中工作,但在这个类中它给出了 NullPointerException ,但代码几乎是相同的。我在这里缺少什么?

我用来填充组合框的代码:

我已将每个变量翻译成英文并删除了一些不必要的内容。我希望你们现在更清楚了:

package unive.billing.boundary.clientmanager.frames;

import unive.billing.control.ClientsManager;
import unive.billing.control.InsuranceManager;

/**
*
* @author Forza
*/

public class ClientFrame extends javax.swing.JFrame {

/**
* Creates new form AddClientGUI
*/
private ClientsManager clientmanager;
private InsuranceManager insurancemanager;

public ClientFrame() {
initComponents();
clientmanager = new ClientsManager();
clientmanager.printList();
updateComboBoxCompany();
updateComboBoxInsurance();
}

private ClientsManager clientmanager;
private InsuranceManager insurancemanager;

public ClientFrame() {
initComponents();
clientmanager = new ClientsManager();
clientmanager.printList();
updateComboBoxCompany();
updateComboBoxInsurance();
}

public void updateComboBoxCompany()
{
for (Object object : insurancemanager.getCompanyNames())
{
companyComboBox.addItem(object);
}
}

public void updateComboBoxInsurance()
{
for (Object object : insurancemanager.getPolicyNames())
{
insuranceComboBox.addItem(object);
}
}

以下是使用的方法:

public Object[] getCompanyNames() 
{
ArrayList<String> cnames = new ArrayList<String>();
for (InsurancesCompany company : insurancecompanyList)
{
cnames.add(company.getCompanyName());
}
return cnames.toArray();
}

public Object[] getPolicyNames()
{
ArrayList<String> vnames = new ArrayList<String>();
for (Insurance insurance : insuranceList)
{
vnames.add(insurance.getPolicyName());
}
return vnames.toArray();
}

这就是我的列表的初始化方式:

public class InsuranceManager {

private String insurancePath;
private String insurancecompanyenPath;
private static List<InsurancesCompany> insurancecompanyList;
private static List<Insurance> insuranceList;
private Insurance currentInsurance;

public InsuranceManager() {
insurancecompanyenPath = "Files/company.txt";
insurancePath = "Files/insurance.txt";
insuranceList = new List<>();
}

public void createNewList()
{
insurancecompanyList = new List<>();
System.out.println("Creates list");
}

public Object[] getCompanyNames()
{
ArrayList<String> cnames = new ArrayList<String>();
for (InsurancesCompany company : insurancecompanyList)
{
cnames.add(company.getCompanyName());
}
return cnames.toArray();
}

public Object[] getPolicyNames()
{
ArrayList<String> vnames = new ArrayList<String>();
for (Insurance insurance : insuranceList)
{
vnames.add(insurance.getPolicyName());
}
return vnames.toArray();
}

编辑:这是调用 createNewList (maakLijstAan) 的 MainGUI

private ClientsManager clientsmanager;
private BillingManager billingmanager;
private InsuranceManager insurancemanager;

public MainGUI() {
clientsmanager = new ClientsManager();
clientsmanager.CreateNewList();
insurancemanager = new InsuranceManager();
insurancemanager.CreateNewList();
insurancemanager.loadInsuranceCompanyList();
initComponents();
jMenuItem1.setText("Save clients");
jMenuItem2.setText("Load clients");
jMenuItem3.setText("Exit");
}

最佳答案

您永远不会初始化verzekeringBeheer,因此当您尝试调用该变量的方法时,您会收到NullPointerException

你的构造函数中应该有这样的地方:

verzekeringbeheer = new VerzekeringBeheer();

此外,尽量避免将代码与代码的其他部分结合在一起。例如:

public VerzekeringBeheer() {
...
//verzekeringmaatschappijLijst is never initialized!!!
}

public void maakLijstAan()
{
verzekeringmaatschappijLijst = new Lijst<>();
System.out.println("Maak lijst aan");
}

public Object[] getMaatschappijNamen()
{
ArrayList<String> mnamen = new ArrayList<String>();
// Here you use verzekeringmaatschappijLijst without checking that is not null!!!
for (VerzekeringsMaatschappij maatschappij : verzekeringmaatschappijLijst)
{
mnamen.add(maatschappij.getMaatschappijNaam());
}
return mnamen.toArray();
}

如果没有人调用 maakLijstAan,您将在 getMaatschappijNamen 中收到 NullPointerException。尽量避免过于依赖外部代码的代码,以便运行时不会出现问题。

关于Java:用对象填充 JComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12856934/

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