当前位置: 代码迷 >> J2SE >> 请问一个有关JAVA中Vector的有关问题
  详细解决方案

请问一个有关JAVA中Vector的有关问题

热度:39   发布时间:2016-04-23 20:38:51.0
请教一个有关JAVA中Vector的问题.
我用两个Vector分别作为表头名和数据创建一个DefaultTableModel,然后用这个DefaultTableModel创建了一个JTable,然后用这个表创建了一个JScrollPane.放进窗口中显示,之后我又创建了一个线程用以刷新表内容,该线程代码如下:
public void run() {
        int i, j;
        while (!pause.finish) {
            dtm.setRowCount(0);                 //清空表    dtm是表的模型
            for (j = 0; j < pcb.size(); j++) {  //  重绘表    pcb是一个链表LinkedList
                v = new Vector();
                v.add(pcb.get(j).id);
                v.add(pcb.get(j).name);
                v.add(pcb.get(j).youxian);
                v.add(pcb.get(j).gettime);
                v.add(pcb.get(j).time);
                v.add(pcb.get(j).worktime);
                v.add(pcb.get(j).iotime);
                v.add(pcb.get(j).state);
                dtm.addRow(v);
            }
            dtm.fireTableDataChanged();
            try {                               //每500毫秒刷新一次
                sleep(500);
            } catch (InterruptedException ex) {
                Logger.getLogger(flash.class.getName()).log(Level.SEVERE, null, ex);
            }
            while (pause.p) {               //暂停按钮实现
                try {
                    sleep(500);
                } catch (InterruptedException ex) {
                    Logger.getLogger(flash.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }

我运行此程序,概率性(约10%概率)出现以下错误(此错误在用鼠标不停地快速改变表行列宽度时几乎增加到90%):
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 0 >= 0
        at java.util.Vector.elementAt(Vector.java:427)
        at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:632)
        at javax.swing.JTable.getValueAt(JTable.java:2686)
        at javax.swing.JTable.prepareRenderer(JTable.java:5703)
        at javax.swing.plaf.basic.BasicTableUI.paintCell(BasicTableUI.java:2072)
后面还有很多(但是没有一条是指向我的代码,全部指向系统代码),该错误不影响我的程序的正常运行,但是看着很郁闷.我知道这个是线程同步和互斥导致的问题,但是我把上面有关Vector的代码弄进一个synchronized修饰的方法中,也出现这种错误.请高手赐教啊!
------解决方案--------------------
上述信息在你不按鼠标时出现吗?
------解决方案--------------------
debug, 光这段代码看不出来什么问题。
------解决方案--------------------
我以前遇到过类似的情况,是因为线程启动引起的。
  相关解决方案