jTable填充和刷新ArrayIndexOutOfBoundsException [英] jTable populating and refreshing ArrayIndexOutOfBoundsException

查看:64
本文介绍了jTable填充和刷新ArrayIndexOutOfBoundsException的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在SwingWorker下面有一个用于填充jTable1的文件.而且我有用于执行此任务的按钮.

I have below SwingWorker for populate the jTable1. And i have button for executing this task.

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,a ...行)并且Java抛出了以下错误;

First, second and sometimes third executing succesfully working. But sometimes when i click my button jTable cleared but desired 5 lines (a,a,a... lines) not coming and Java throw below error;

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次.任何帮助表示赞赏. 谢谢.

I don't understand whats going on. Also i can't debug it because problem occured randomly. Sometimes i execute the task and see data on the screen 5-6 times, sometimes 1-2 times. Any help appreciated. Thanks.

-编辑---

我的按钮是;

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

推荐答案

---已解决---

---SOLVED---

在按钮事件中检测到问题.

Problem detected in button event.

fTextFieldSB.getText()fTextFieldP.getText()返回类似于""的空字符串,因此,如果不返回null,则所有条件都在同一时间触发.我们不想要它.如果有条件的话;

fTextFieldSB.getText() and fTextFieldP.getText() returns empty string like a "" So if not return null, all if conditions fired in same time. We dont want it. If conditions should be;

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

这篇关于jTable填充和刷新ArrayIndexOutOfBoundsException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆