gpt4 book ai didi

java - 动态更新 JComboBox (NullPointerException)

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:09:13 25 4
gpt4 key购买 nike

我正在尝试动态更新 swing 应用程序中的 JComboBox 并获取空指针异常。

class Accounts extends JPanel {

JComboBox<String> accountSelect;
DefaultComboBoxModel accountSelectModel;
public Accounts() {
this.initGUI();
}
public void initGUI() {
//setLayout etc...
String[] al = {};//start empty
this.accountSelectModel = new DefaultComboBoxModel(al);
this.accountSelect = new JComboBox<String>();
this.accountSelect.setModel(accountSelectModel);
this.add(this.accountSelect);
}
public void updateComboBox(String[] al) {
//clear items and apply new
this.accountSelectModel = new DefaultComboBoxModel(al);
this.accountSelect.setModel(this.accountSelectModel);
}

public void removeComboBoxItems() {
//A call HERE here resorts in a null exception pointer ???
this.accountSelectModel.removeAllElements();
}

}

感谢任何反馈。

更新

解决了问题。最初我非常确定这不是问题所在(很抱歉没有输入这段代码)。

我最初是通过 addActionListener(在 Accounts 内)向 accountSelect 组合框添加监听器。

  this.accountSelect.addActionListener(new AcountActionListener);

class AcountSelectListener implements ActionListener {
void actionPerformed(ActionEvent e) P
//Object source etc..
if(source == accountSelect) {
//etc...
selectAccount(item);
}
}

}

相反,我正在做:

class Accounts extends JPanel implements ActionListener 

并覆盖帐户内的 actionPerformed 方法。

这解决了我的问题...

更新 2

但是,我更愿意(以及其他人推荐的)我不必制作整个 Accounts 类 ActionListener。

所以我转到原始文件,发现问题是每次调用 this.accountSelectModel.removeAllElements 都会在添加到 this.accountSelect 的内部 AccountSelectListener 中触发一个操作。

监听器旨在设置新的组合框选项,但由于在发生选择更改时未调用它(但在 removeAllElements 上),对象源(项目)为 null,在传递时抛出 NPE。

最佳答案

避免 calling public methods in the constructor .特别是,检查您是否从 Accounts 构造函数完成之前添加的监听器调用 removeComboBoxItems(),如果您未能在event dispatch thread .通过 defaultaccountSelectModel 的值为null

顺便说一句,JComboBox 监听其 ComboBoxModel,因此您不必替换模型;只需就地更新即可。

关于java - 动态更新 JComboBox (NullPointerException),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16376997/

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