2012-04-29 8 views
5

जब मैं JList<String>.getModel() पर कॉल करता हूं और इसे DefaultListModel<String> पर डालता हूं तो यह मुझे यह अपवाद देता है।JList.getModel() ClassCastException

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(...); 

यह हालांकि यह हर बार ऐसा नहीं करता है। अधिकांश समय यह पूरी तरह से काम करता है, लेकिन दूसरी बार यह इस अपवाद को फेंक देता है। मुझे समझ में नहीं आता कि यह क्यों हो रहा है। क्या ऐसा कुछ भी हो रहा है जो इसे रोकने से रोकने के लिए कर सकता है?

+1

बेहतर मदद जल्दी के लिए चुनते हैं, तो [SSCCE] (http://sscce.org/) पोस्ट करते हैं। –

+0

इसके लायक होने के लिए मैंने सोचा कि सवाल उचित और पूर्ण था, हालांकि यह एंड्रयू के संपादन के कारण हो सकता है। – ditkin

+1

@ditkin मैं यह भी नहीं बता सकता कि एंड्रयू ने क्या संपादित किया। लेकिन मुझे समस्या मिली, यह 'setListData (E []) विधि को कॉल कर रहा था,' सूची के 'ListModel' को बदल दिया। – Stripies

उत्तर

5

आपको यह नहीं मानना ​​चाहिए कि यह एक डिफ़ॉल्टसूची मॉडल है। इंटरफ़ेस ListModel का उपयोग करें। जेएलिस्ट ListModel का आंतरिक कार्यान्वयन लौट रहा है।

यदि आपको अंतर्निहित मॉडल तक पहुंच की आवश्यकता है तो आपको इसे बनाना चाहिए, इसे जेएलिस्ट कन्स्ट्रक्टर में सेट करें और इसे स्वयं बनाए रखें।

+0

इसे बनाए रखना जरूरी नहीं है! निकोला despotoski के जवाब देखें यह बहुत अधिक कुशल है! –

13

मुझे इस समस्या का अनुभव हुआ। मैं इस सरल तरीके को मिला:

//----instantiation---- 

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

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

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

मुझे एक ही समस्या थी ... इसे एक नई डिफ़ॉल्ट सूची मॉडल के साथ बनाना सबकुछ ठीक करता है। +1 – jessechk

1

JList<String>.getModel(), इससे पहले कि आप अपने ऑब्जेक्ट को प्रारंभ करना चाहिए JList<String>.setModel(new DefaultModelList())

+1

पहले के उत्तरों में से किसी एक की तुलना में कुछ भी नया नहीं है ;-) – kleopatra

7

आप NetBeans

  1. उपयोग कर रहे हैं का चयन करें अपने JList
  2. गुण में, क्लिक करें मॉडल बटन
  3. "कस्टम कोड" विकल्प
  4. लिखें new DefaultListModel()

jList custom code

संबंधित मुद्दे