Java:用对象填充JComboBox
我试图用对象填充jComboBox。我让它在一个类中工作,但是在这个类中它给出了一个Java:用对象填充JComboBox,java,swing,object,arraylist,jcombobox,Java,Swing,Object,Arraylist,Jcombobox,我试图用对象填充jComboBox。我让它在一个类中工作,但是在这个类中它给出了一个NullPointerException,但是代码几乎是一样的。我错过了什么 我用来填充组合框的代码: 我已经将每个变量翻译成英语,并删除了一些不必要的内容。我希望你们现在更清楚了: package unive.billing.boundary.clientmanager.frames; import unive.billing.control.ClientsManager; import unive.bill
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();
}
我只看到您使用变量,但对我来说,它们没有初始化。所以它们是空的,你得到一个NPE 那么
verzekeringmaatschapijlijst
和verzekeringLijst
是如何初始化的呢?- 所有数据
- 设置适当的
类型(对象
,字符串
,整数
或简单的图标
),Java7实现泛型,有对象
- 所有更新(对
或其JComboBox
型号的更新)必须在
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();
}
public-VerzekeringBeheer(){
...
//VerzekeringMaatschapijlijst从未初始化!!!
}
公共无效maakLijstAan()
{
Verzekeringmaatschapijlijst=新的Lijst();
系统输出打印(Maak lijst aan);
}
公共对象[]GetMaatschapijNamen()
{
ArrayList mnamen=新的ArrayList();
//在这里,您使用verzekeringmaatschapijlijst而不检查它是否为空!!!
对于(VerzekeringMaatschapij-Maatschapij:VerzekeringMaatschapijst)
{
mnamen.add(maatschapij.getmaatschapijnaam());
}
返回mnamen.toArray();
}
如果没有人调用
maakLijstAan
,您将在getMaatschappijNamen
中获得NullPointerException
。尽量避免使用依赖于外部代码的代码,以便运行时不会出现问题。如果您告诉我们您在哪里获得NPE,这也会有所帮助。这些变量中的名称到底是什么?使用一些CamelCase和更短的名称!2我用这行代码获得NPE:for(Object:verzekeringbeheer.getMaatschappijNamen())1)要更快地获得更好的帮助,请发布一个。2) 由于英语是编程和站点的默认语言,并且变量名具有指导意义,因此请使用英语(以及使用CamelCase等)来命名变量。@Forza:如果您获得NPE,则verzekeringbeheer为空。因为我们没有这部分代码,所以不可能判断出什么是错误的。我现在将把它添加到OP中。请参见中显示的对比示例。这里有很多信息!谢谢你,我现在就过去;)我有一个MainGUI类,它调用maakLijstAan(createNewList)。现在将其添加到OP中。@Forza我确信您在某个地方调用了该方法。我只是说,通过选择这样的代码模式,您正在寻找麻烦,代码紧密耦合,代码维护困难。无论如何,您最初的问题仍然是一样的,您从来没有实例化过verzekeringBeheer
@Forza,也不会在InsuranceManager类中删除那些静态
关键字。它们是不必要的,因为没有初始化verzekeringBeheer而麻烦重重。。我现在想跳出窗口…还有一件事:静态关键字是必要的,因为如果我离开它们,我会得到另一个NPE。现在我有一个组合框工作,一个不工作。InsuranceComboBox未加载任何值
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();
}