2010-04-19 13 views
6

के कारण होने के कारण मुझे यकीन नहीं है कि यह क्यों पुनरावर्ती है।StackOverflow त्रुटि एक TableModelListener

jTable1.getModel().addTableModelListener(new TableModelListener() { 

public void tableChanged(TableModelEvent evt) { 
    int sum = 0; 
    int i=0; 
    for (i =0 ; i<2; i++){ 
    sum = sum + Integer.parseInt(jTable1.getValueAt(0, i).toString()); 
    } 
    jTable1.setValueAt(sum, 0, 2); 
} 

}); 

अपवाद है: (यह दोहरा रहता है)

Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError 
     at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:277) 
     at javax.swing.JTable.convertColumnIndexToModel(JTable.java:2553) 
     at javax.swing.JTable.getValueAt(JTable.java:2695) 
     at testprogram.guitest.TestTableModel$1.tableChanged(TestTableModel.java:63) 
     at javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:280) 
     at javax.swing.table.AbstractTableModel.fireTableCellUpdated(AbstractTableModel.java:259) 
     at javax.swing.table.DefaultTableModel.setValueAt(DefaultTableModel.java:650) 
     at javax.swing.JTable.setValueAt(JTable.java:2719) 

किसी भी मदद की सराहना की।

उत्तर

2

JTable.setValueAt एक तालिकाबद्ध घटना को आग लगने का कारण बनता है, इसलिए आप घटना हैंडलर के भीतर से ईवेंट हैंडलर को बार-बार कॉल कर रहे हैं। मॉडल में मान सेट करें, तालिका में नहीं।

+3

मुझे पता है कि यह पुराना है, लेकिन यह इंगित करना चाहता था कि इससे समस्या ठीक नहीं होती है क्योंकि तालिका मॉडल बदल जाता है चाहे तालिका का सेट वैल्यूएट विधि या मॉडल का सेट वैल्यूएट विधि का उपयोग किया जाता है। @ जैम का जवाब कम से कम एक स्वीकार्य उत्तर होना चाहिए। – mdscruggs

1

आप अपडेट के लिए इवेंट हैंडलर में कोई मान अपडेट कर रहे हैं। यह स्वाभाविक रूप से ईवेंट हैंडलर को फिर से बुलाएगा। जो ईवेंट हैंडलर को फिर से बुलाया जाएगा, आदि

आपको अद्यतन करने से पहले श्रोता को शायद हटाने की आवश्यकता होगी।

0

jlist का उपयोग करते समय मुझे पहले एक ही समस्या का सामना करना पड़ रहा था। मेरा समाधान बस कोड की मेरी लाइनों के अनुक्रम को बदलना था।

  1. सभी jpanel एस छवियां प्राप्त करें।
  2. सिर्फ jlist

मुद्दा मैं पहले था (जो निर्माण कर रहा है एक stack-overflow errorjlist पहले करने के लिए श्रोता जोड़ने किया गया था, तो छवियों के साथ jpanel रों के सभी प्राप्त करने के लिए object[] जोड़ने से पहले एक श्रोता जोड़ें।

9

ईवेंट हैंडलर (tableChanged विधि) अपने कोड लपेट कि कोड के साथ setValue विधि का उपयोग करता है को हटाने और श्रोता जोड़ने के लिए, इस

की तरह

यह सत्यापन पर काम करते समय अस्थायी रूप से श्रोता को अक्षम कर देगा।

+0

बहुत बढ़िया! इससे मुझे बहुत मदद मिली! – skiabox

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