2015-05-11 111 views
0

我有下面的SwingWorker填充jTable1。我有執行此任務的按鈕。jTable填充和刷新ArrayIndexOutOfBoundsException

public class WorkerTime extends SwingWorker<Void, Void> { 

    protected Void doInBackground() throws Exception { 

     DefaultTableModel model1 = (DefaultTableModel) jTable1.getModel(); 
     model1.setRowCount(0); 

      for (int i = 0; i < 5; i++){ 

       model1.addRow(new String[]{"a","a","a","a","a","a","a","a","a","a","a"}); 
       model1.fireTableDataChanged(); 

      } 

    return null; 
    } 

    public void done() { 

    } 

} 

第一,第二和有時第三次執行成功工作。但有時,當我點擊我的按鈕jTable清除,但期望5行(a,a,...線)不來,Java拋出錯誤;

Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 0 
    at java.util.Vector.elementAt(Vector.java:470) 
    at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:649) 
    at javax.swing.JTable.getValueAt(JTable.java:2717) 
    at javax.swing.JTable.prepareRenderer(JTable.java:5719) 
    at javax.swing.plaf.synth.SynthTableUI.paintCell(SynthTableUI.java:684) 
    at javax.swing.plaf.synth.SynthTableUI.paintCells(SynthTableUI.java:581) 
    at javax.swing.plaf.synth.SynthTableUI.paint(SynthTableUI.java:365) 
    at javax.swing.plaf.synth.SynthTableUI.update(SynthTableUI.java:276) 
    at javax.swing.JComponent.paintComponent(JComponent.java:778) 
    at javax.swing.JComponent.paint(JComponent.java:1054) 
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5219) 
    at javax.swing.RepaintManager$PaintManager.paintDoubleBuffered(RepaintManager.java:1529) 
    at javax.swing.RepaintManager$PaintManager.paint(RepaintManager.java:1452) 
    at javax.swing.RepaintManager.paint(RepaintManager.java:1249) 
    at javax.swing.JComponent._paintImmediately(JComponent.java:5167) 
    at javax.swing.JComponent.paintImmediately(JComponent.java:4978) 
    at javax.swing.RepaintManager$3.run(RepaintManager.java:808) 
    at javax.swing.RepaintManager$3.run(RepaintManager.java:796) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:796) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:769) 
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:718) 
    at javax.swing.RepaintManager.access$1100(RepaintManager.java:62) 
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1677) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733) 
    at java.awt.EventQueue.access$200(EventQueue.java:103) 
    at java.awt.EventQueue$3.run(EventQueue.java:694) 
    at java.awt.EventQueue$3.run(EventQueue.java:692) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:703) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 

我不明白髮生了什麼事。我也無法調試它,因爲問題隨機發生。有時我執行任務並在屏幕上查看數據5-6次,有時候是1-2次。任何幫助讚賞。 謝謝。

---編輯---

我的按鈕是;

if(radioButtonLF.isSelected() || radioButtonLF2.isSelected() || radioButtonT.isSelected() || radioButtonLH.isSelected()){ 
    WorkerTime workerTime = new WorkerTime(); 
    workerTime.execute(); 
} 
if(!fTextFieldSB.getText().equals(null)){ 
    WorkerSB workerSB = new WorkerSB(); 
    workerSB.execute(); 
} 
if(!fTextFieldP.getText().equals(null)){ 
    WorkerPB workerPB = new WorkerPB(); 
    workerPB.execute(); 
} 

回答

0

---求助---

在按鈕事件中檢測到的問題。

fTextFieldSB.getText()fTextFieldP.getText()返回空字符串,如""所以如果不返回null,所有條件如果在同一時間觸發。我們不想要它。如果條件應該是;

if(radioButtonLF.isSelected() || radioButtonLF2.isSelected() || radioButtonT.isSelected() || radioButtonLH.isSelected()){ 
    WorkerTime workerTime = new WorkerTime(); 
    workerTime.execute(); 
} 
if(!fTextFieldSB.getText().equals("")){ 
    WorkerSB workerSB = new WorkerSB(); 
    workerSB.execute(); 
} 
if(!fTextFieldP.getText().equals("")){ 
    WorkerPB workerPB = new WorkerPB(); 
    workerPB.execute(); 
} 
0

不確定這是否解決了您的問題,但您無需致電fireTableDataChanged()。這是在addRow內完成的。

+0

我加了我的Button事件 –