Java JList.getModel()类CastException

Java JList.getModel()类CastException,java,swing,jlist,Java,Swing,Jlist,当我调用JList.getModel()并将其强制转换为DefaultListModel时,它给出了这个异常 Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JList$4 cannot be cast to javax.swing.DefaultListModel 抛出它的代码: private JList<String> list = new JList<St

当我调用
JList.getModel()
并将其强制转换为
DefaultListModel
时,它给出了这个异常

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: javax.swing.JList$4 cannot be cast to javax.swing.DefaultListModel
抛出它的代码:

private JList<String> list = new JList<String>();
((DefaultListModel<String>) list.getModel()).addElement(...);
private JList=new JList();
((DefaultListModel)list.getModel()).addElement(…);

但并不是每次都这样。大多数时候它工作得很完美,但其他时候它抛出这个异常。我不明白为什么会这样。我能做些什么来阻止这种情况发生吗?

您不应该假设它是一个DefaultListModel。使用接口ListModel。 JList正在返回ListModel的内部实现


如果您需要访问基础模型,您应该创建它,在JList构造函数中设置它并自己保留它。

我遇到过这个问题。我发现了这个简单的解决方法:

//----instantiation----

    JList mList = new JList();
    mList.setModel(new DefaultListModel());

    /*---- do whatever you want---- */

    //Retain it wherever you want with
    DefaultListModel model = (DefaultListModel)mList.getModel();

JList.getModel(),
之前,如果使用NetBeans,必须初始化对象
JList.setModel(新的DefaultModelList())

  • 选择您的jList
  • 在“属性”中,单击“模型”按钮
  • 选择“自定义代码”选项
  • 编写新的DefaultListModel()

  • 为了更快地获得更好的帮助,请发布一篇文章。关于这个问题的价值,我认为这个问题是合理和完整的,尽管这可能是因为andrew的编辑。@ditkin我甚至不知道andrew编辑了什么。但是我发现了问题,它调用了方法
    setListData(E[])
    更改了列表的
    ListModel
    。。。使用新的默认列表模型创建它可以修复所有问题+1与前面的答案相比,没有什么新的,是吗;-)保留它是没有必要的!看尼古拉·德斯波托斯基的答案,它的效率要高得多!