Java Swing:Jtable ArrayIndexOutOfBoundsException [英] Java Swing: Jtable ArrayIndexOutOfBoundsException

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

问题描述

有时会获得此异常。我真的不知道哪里有问题,我使用abstracttablemodel的实现。我无法找到发生异常的精确位置,因为当我使用调试器并且一步一步地运行异常时不会发生。

I sometimes get this exception. I dont really know where's problem, i use my implementation of abstracttablemodel. I CANT found the excact place where exception occurs, beacause when i use debugger and run step by step exception doesnt occur.

Exception occurred during event dispatching:
    java.lang.ArrayIndexOutOfBoundsException: 2 >= 2
    at java.util.Vector.elementAt(Vector.java:427)
    at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java:277)
    at javax.swing.plaf.basic.BasicTableUI.paintGrid(BasicTableUI.java:1931)
    at javax.swing.plaf.basic.BasicTableUI.paint(BasicTableUI.java:1767)
    at com.alee.laf.table.WebTableUI.paint(WebTableUI.java:52)
    at javax.swing.plaf.ComponentUI.update(ComponentUI.java:143)
    at javax.swing.JComponent.paintComponent(JComponent.java:752)
    at javax.swing.JComponent.paint(JComponent.java:1029)
    at javax.swing.JComponent.paintChildren(JComponent.java:862)
    at javax.swing.JComponent.paint(JComponent.java:1038)
    at javax.swing.JViewport.paint(JViewport.java:747)
    at javax.swing.JComponent.paintToOffscreen(JComponent.java:5124)
    at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:278)
    at javax.swing.RepaintManager.paint(RepaintManager.java:1225)
    at javax.swing.JComponent._paintImmediately(JComponent.java:5072)
    at javax.swing.JComponent.paintImmediately(JComponent.java:4882)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:786)
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:714)
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:694)
    at javax.swing.RepaintManager.access$700(RepaintManager.java:41)
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1636)
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:641)
    at java.awt.EventQueue.access$000(EventQueue.java:84)
    at java.awt.EventQueue$1.run(EventQueue.java:602)
    at java.awt.EventQueue$1.run(EventQueue.java:600)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:611)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178)
    at java.awt.Dialog$1.run(Dialog.java:1046)
    at java.awt.Dialog$3.run(Dialog.java:1098)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.awt.Dialog.show(Dialog.java:1096)
    at java.awt.Component.show(Component.java:1584)
    at java.awt.Component.setVisible(Component.java:1536)
    at java.awt.Window.setVisible(Window.java:842)
    at java.awt.Dialog.setVisible(Dialog.java:986)
    at ui.MainFrame.queryButtonActionPerformed(MainFrame.java:936)
    at ui.MainFrame.access$700(MainFrame.java:89)
    at ui.MainFrame$9.actionPerformed(MainFrame.java:538)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
    at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)
    at java.awt.Component.processMouseEvent(Component.java:6288)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
    at java.awt.Component.processEvent(Component.java:6053)
    at java.awt.Container.processEvent(Container.java:2041)
    at java.awt.Component.dispatchEventImpl(Component.java:4651)
    at java.awt.Container.dispatchEventImpl(Container.java:2099)
    at java.awt.Component.dispatchEvent(Component.java:4481)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
    at java.awt.Container.dispatchEventImpl(Container.java:2085)
    at java.awt.Window.dispatchEventImpl(Window.java:2478)
    at java.awt.Component.dispatchEvent(Component.java:4481)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
    at java.awt.EventQueue.access$000(EventQueue.java:84)
    at java.awt.EventQueue$1.run(EventQueue.java:602)
    at java.awt.EventQueue$1.run(EventQueue.java:600)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98)
    at java.awt.EventQueue$2.run(EventQueue.java:616)
    at java.awt.EventQueue$2.run(EventQueue.java:614)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:613)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

我的桌子型号:

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package util;

import entity3.Document;
import entity3.Msg;
import entity3.Senderreceiver;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;

/**
 *
 * @author work
 */
public class IncomingMailTableModel extends AbstractTableModel{
    public String[] getColumnNames() {
        return columnNames;
    }

    public void setColumnNames(String[] columnNames) {
        this.columnNames = columnNames;
    }
    private String[] columnNames = {"Дата",
        "Тема",
        "Відправник",
        "Статус"};

    private List<Document> documents;

    public IncomingMailTableModel(List<Document> documents) {
        this.documents = documents;
    }

    @Override
    public int getRowCount() {
        return documents.size();
    }

    @Override
    public int getColumnCount() {
        return columnNames.length;
    }

    @Override
    public String getColumnName(int col) {
        return columnNames[col];
    }

    public Document getObjectAtRow(int row) {     
        return documents.get(row);  
    }
    @Override
    public Class getColumnClass(int column) {
        switch (column) {
            case 0:
                return String.class;
            case 1:
                return String.class; 
            case 2:
                return String.class;
            case 3:
                return String.class;

        }
        return null;
    }

    @Override
    public String getValueAt(int row, int column) {
        String toReturn = "";
        Document document = documents.get(row);
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
        Msg msg =document.getMsg();
        ArrayList<Senderreceiver> senderReceivers = new ArrayList<Senderreceiver>(msg.getSenderreceivers());
        //ArrayList<Document> docs = new ArrayList<Document>(document.getMsg().getDocuments());
        switch (column) {
            case 0:
                if (document.getMsg().getReceivingDate() != null) 
                    toReturn = format.format(document.getMsg().getReceivingDate());

                break;
            case 1:
                toReturn = document.getTitle();

                break;

            case 2:
                for (Object o : senderReceivers) {
                    Senderreceiver senderReceiver = (Senderreceiver) o;
                    if (senderReceiver.getRole()==0) {
                        toReturn = senderReceiver.getOrganization().getShortName();
                    }
                }
                break;
            case 3:
                if (document.getMsg().getIsRead()!=null)
                if(document.getMsg().getIsRead()) toReturn = "Прочитано";
                else toReturn="Непрочитано";
                break;
        }
        return toReturn;
    }
}


推荐答案

这如果要从事件调度线程以外的线程修改 TableModel (或TableModel所在的数据结构),则会出现这种情况。

This can occurr if you are modifying the TableModel (or the data structure that the TableModel "sits on") from a thread other than the Event Dispatch thread.

此错误的另一个常见原因是混合了视图和模型索引。例如,如果使用 getSelectedRow() JTable 中检索所选行,则返回的值为基于视图的索引。如果您希望索引到相应的 TableModel ,则需要使用 convertRowIndexToModel

Another common cause of this error is mixing up view and model indices. For example, if you retrieve the selected row from a JTable using getSelectedRow() the value returned is a view-based index. If you wish to index into the corresponding TableModel you need to convert this value using convertRowIndexToModel.

对于后一种情况,您可以尝试通过对不同列上的表进行排序,然后单击各行(特别是第一个和最后一个),或者在UI中执行任何操作来复制此异常,以便处理那一行。

For the latter case you can try and replicate this exception by sorting the table on different columns and then clicking various rows (in particular first and last), or performing whatever action is required in your UI in order to "process" that row.

这篇关于Java Swing:Jtable ArrayIndexOutOfBoundsException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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