经常出现这种异常,或许是事件分配线程的问题,可找不到原因,界面上点击树或表格是偶尔出现,谁能给些提示吗?Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 4 >= 4
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 org.jdesktop.swingx.JXTable.prepareRenderer(JXTable.java:3545)
at javax.swing.plaf.synth.SynthTableUI.paintCell(SynthTableUI.java:622)
at javax.swing.plaf.synth.SynthTableUI.paintCells(SynthTableUI.java:519)
at javax.swing.plaf.synth.SynthTableUI.paint(SynthTableUI.java:308)
at javax.swing.plaf.synth.SynthTableUI.update(SynthTableUI.java:234)
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.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at org.jdesktop.swingx.JXPanel.paint(JXPanel.java:489)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JLayeredPane.paint(JLayeredPane.java:567)
at javax.swing.JComponent.paintChildren(JComponent.java:862)
at javax.swing.JComponent.paint(JComponent.java:1038)
at javax.swing.JComponent.paintToOffscreen(JComponent.java:5124)
at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:278)
at javax.swing.RepaintManager.paint(RepaintManager.java:1224)
at javax.swing.JComponent._paintImmediately(JComponent.java:5072)
at javax.swing.JComponent.paintImmediately(JComponent.java:4882)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:785)
at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:713)
at javax.swing.RepaintManager.seqPaintDirtyRegions(RepaintManager.java:693)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(SystemEventQueueUtilities.java:125)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
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)异常java

解决方案 »

  1.   


    工程太大了,没办法全贴出来,下面是几个相关的函数。
    public void refreshData() {
    getUndesignatedUser();
    TreePath path = tree.getSelectionPath();
    if (path == null)
    return;
    Object selObj = ((DefaultMutableTreeNode) path.getLastPathComponent())
    .getUserObject();
    if (!(selObj instanceof Department))
    return;
    getDesignatedUser(selectedDepartment);
    } public void valueChanged(TreeSelectionEvent e) {
    btnSubmit.setEnabled(false);
    int rowCount = modelDesignatedUser.getRowCount();
    for (int i = 0; i < rowCount; i++)
    modelDesignatedUser.removeRow(0);
    rowCount = modelUndesignatedUser.getRowCount();
    for (int i = 0; i < rowCount; i++)
    modelUndesignatedUser.removeRow(0);
    selectedDepartment = null;
    initButtonsState();
    addedUsers.clear();
    deletedIDs.clear();
    getUndesignatedUser();
    TreePath path = e.getNewLeadSelectionPath();
    if (path != null) {
    Department dept = (Department) ((DefaultMutableTreeNode) path
    .getLastPathComponent()).getUserObject();
    selectedDepartment = dept;
    getDesignatedUser(selectedDepartment);
    }
    }public void getUndesignatedUser() { vRightTableData.clear();
    for (int i = 0; i < SprojectOAMS.vUser.size(); i++) {
    UserDepartment ud = SprojectOAMS.vUser.get(i);
    if (ud.departmentID == 0) {
    Vector<Object> vRow = new Vector<Object>();
    vRow.add(ud);
    vRow.add(ud.ID);
    vRow.add(ud.departmentID);
    vRow.add(ud.userID);
    vRightTableData.add(vRow);
    }
    } SwingUtilities.invokeLater(new Runnable() {
    public void run() {
    modelUndesignatedUser.setDataVector(vRightTableData, vTitle);
    for (int i = 0; i < tableUndesignatedUser.getColumnModel()
    .getColumnCount(); i++) {
    tableUndesignatedUser.getColumnModel().getColumn(i)
    .setCellRenderer(renderer);
    }
    tableUndesignatedUser.packAll();
    tableUndesignatedUser.updateUI();
    }
    });
    }
      

  2.   

    java.lang.ArrayIndexOutOfBoundsException: 4 >= 4这是数组越界异常。
    你把异常信息帖全一点吧,我还没看到你的代码哪里抛出的
      

  3.   

    出现这种情况多半是多线程引起的线程安全问题。Vector这个东西不能保证线程安全的,你换成copyonwritearralist试试