Java:使用对象填充JComboBox

时间:2012-10-12 10:17:16

标签: java swing object arraylist jcombobox

我正在尝试用对象填充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");
}

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

您永远不会初始化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,您将在NullPointerException中获得getMaatschappijNamen。尽量避免代码依赖于外部代码,以便顺利运行。

答案 2 :(得分:0)

我只看到你使用变量,但对我来说,他们是初始化的。所以他们是空的,你得到一个NPE。

那么verzekeringmaatschappijLijstverzekeringLijst如何初始化?

相关问题