java - 动态更新 JComboBox (NullPointerException)

标签 java swing nullpointerexception jcombobox comboboxmodel

我正在尝试动态更新 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/

相关文章:

java - 空检查链与捕获 NullPointerException

java - 等待和通知 - 打印不同的线程 ID

java - 层次继承的正确UML是什么?

java - 删除java中Jlabel中的图像

java - 如何更改 JTable 表头高度?

c# - 为什么我会收到错误 "NullReferenceException was unhandled"?

java - saveInstanceState 包中的 NullPointerException

Java 左移位返回错误值

java - 使用 JDBC,如何将多个 ID 替换为 "DELETE FROM T WHERE id IN (?)"

java - 执行的操作不改变文本