2012-08-13 56 views
2

我无法找到问题在我的jtable排序机制,当我执行排序内搜索代码它给我数组索引超出界限,填充表代码在初始阶段工作正常,但在搜索发生后它也卡住了。无法找到ArrayIndexOutOfBoundsException:6> 1的含义?当排序jtable

我的应用程序有一个文本字段区域,它接受从数据库中搜索的关键字。现在搜索后,它显示在jtable上,我想提供表分类器。任何帮助表示赞赏。这些。我还提供了下面的堆栈跟踪。

//问题代码

// for searching data from data base and display it in table 
// according to the keyword typed. 

private void jTextField1KeyPressed(java.awt.event.KeyEvent evt) {          

    System.out.println(evt.getKeyCode()); 

    if(evt.getKeyCode() == KeyEvent.VK_ENTER){ 
    jTable1.setModel(new javax.swing.table.DefaultTableModel(
      new Object [][] { 
       {null, null, null} 
      }, 
      new String [] { 
       "cust_ID", "Title 2", "Title 3" 
      } 
     ) { 
      boolean[] canEdit = new boolean [] { 
       false, false, false 
      }; 

      public boolean isCellEditable(int rowIndex, int columnIndex) { 
       return canEdit [columnIndex]; 
      } 
     }); 
    jTable1.removeColumn(jTable1.getColumnModel().getColumn(0)); 
    String query = "SELECT emp_id, emp_name, emp_address FROM employee WHERE emp_name LIKE '"+jTextField1.getText()+"%' "; 
    ArrayList<String> s = new ArrayList<String>(); 
    try{ 
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    Connection con = DriverManager.getConnection("jdbc:odbc:EazySource"); 
    Statement psmt = con.createStatement(); 
    //smt.setChar(1,"a"); 
    int rows = jTable1.getRowCount(); 
    ResultSet result = psmt.executeQuery(query); 
    int i = 0; 
    DefaultTableModel model = null; 
    while(result.next()){ 


     jTable1.getModel().setValueAt(Integer.toString(result.getInt("emp_id")), i, 0); 
     jTable1.setValueAt(result.getString("emp_name"), i, 0); 
     jTable1.setValueAt(result.getString("emp_address"), i, 1); 

     model = (DefaultTableModel)jTable1.getModel(); 
     model.insertRow(jTable1.getRowCount(), new Object[]{null, null, null, null, null}); 
     String s1 = jTable1.getModel().getValueAt(i, 0).toString(); 
     System.out.println("id: "+s1); 
     i++; 
    } 
    model.removeRow(i); 
    TableRowSorter<TableModel> sorter 
        = new TableRowSorter<TableModel>(jTable1.getModel()); 
    jTable1.setRowSorter(sorter); 
    for(String val:s){ 
     jTextField1.setText(val); 

    } 
    con.close(); 
    }catch(Exception e){ 
     System.out.println(e); 
     e.printStackTrace(); 

    } 
    } 
}          
//initially populating table when app starts 
public void populatetable(){ 
    jTable1.setModel(new javax.swing.table.DefaultTableModel(
      new Object [][] { 
       {null, null, null} 
      }, 
      new String [] { 
       "cust_ID", "Title 2", "Title 3" 
      } 
     ) { 
      boolean[] canEdit = new boolean [] { 
       false, false, false 
      }; 

      public boolean isCellEditable(int rowIndex, int columnIndex) { 
       return canEdit [columnIndex]; 
      } 
     }); 
    jTable1.removeColumn(jTable1.getColumnModel().getColumn(0)); 
    String query = "SELECT emp_id, emp_name, emp_address FROM employee "; 
    ArrayList<String> s = new ArrayList<String>(); 
    try{ 
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
    Connection con = DriverManager.getConnection("jdbc:odbc:EazySource"); 
    Statement psmt = con.createStatement(); 
    //smt.setChar(1,"a"); 
    int rows = jTable1.getRowCount(); 
    ResultSet result = psmt.executeQuery(query); 
    int i = 0; 
    DefaultTableModel model = null; 
    while(result.next()){ 


     jTable1.getModel().setValueAt(Integer.toString(result.getInt("emp_id")), i, 0); 
     jTable1.setValueAt(result.getString("emp_name"), i, 0); 
     jTable1.setValueAt(result.getString("emp_address"), i, 1); 

     model = (DefaultTableModel)jTable1.getModel(); 
     model.insertRow(jTable1.getRowCount(), new Object[]{null, null, null, null, null}); 
     String s1 = jTable1.getModel().getValueAt(i, 0).toString(); 
     System.out.println("id: "+s1); 
     i++; 
    } 
    model.removeRow(i); 
    TableRowSorter<TableModel> sorter 
        = new TableRowSorter<TableModel>(jTable1.getModel()); 
    jTable1.setRowSorter(sorter); 
    for(String val:s){ 
     jTextField1.setText(val); 

    } 
    con.close(); 
    }catch(Exception e){ 
     System.out.println(e); 
     e.printStackTrace(); 

    } 

} 

我的堆栈跟踪,想不通6> 1在这里意味着什么

java.lang.ArrayIndexOutOfBoundsException: 6 > 1 
    at java.util.Vector.insertElementAt(Vector.java:594) 
    at javax.swing.table.DefaultTableModel.insertRow(DefaultTableModel.java:374) 
    at javax.swing.table.DefaultTableModel.insertRow(DefaultTableModel.java:389) 
    at javanotepad.NewJFrame.jTextField1KeyPressed(NewJFrame.java:174) 
    at javanotepad.NewJFrame.access$000(NewJFrame.java:29) 
    at javanotepad.NewJFrame$2.keyPressed(NewJFrame.java:82) 
    at java.awt.Component.processKeyEvent(Component.java:6463) 
    at javax.swing.JComponent.processKeyEvent(JComponent.java:2829) 
    at java.awt.Component.processEvent(Component.java:6282) 
    at java.awt.Container.processEvent(Container.java:2229) 
    at java.awt.Component.dispatchEventImpl(Component.java:4861) 
    at java.awt.Container.dispatchEventImpl(Container.java:2287) 
    at java.awt.Component.dispatchEvent(Component.java:4687) 
    at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1890) 
    at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:752) 
    at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:1017) 
    at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:889) 
    at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:717) 
    at java.awt.Component.dispatchEventImpl(Component.java:4731) 
    at java.awt.Container.dispatchEventImpl(Container.java:2287) 
    at java.awt.Window.dispatchEventImpl(Window.java:2713) 
    at java.awt.Component.dispatchEvent(Component.java:4687) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:707) 
    at java.awt.EventQueue.access$000(EventQueue.java:101) 
    at java.awt.EventQueue$3.run(EventQueue.java:666) 
    at java.awt.EventQueue$3.run(EventQueue.java:664) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
    at java.awt.EventQueue$4.run(EventQueue.java:680) 
    at java.awt.EventQueue$4.run(EventQueue.java:678) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:677) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 1 >= 1 
    at java.util.Vector.elementAt(Vector.java:470) 
    at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:649) 
    at javax.swing.JTable.getValueAt(JTable.java:2720) 
    at javax.swing.JTable.prepareRenderer(JTable.java:5718) 
    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:5221) 
    at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295) 
    at javax.swing.RepaintManager.paint(RepaintManager.java:1206) 
    at javax.swing.JComponent._paintImmediately(JComponent.java:5169) 
    at javax.swing.JComponent.paintImmediately(JComponent.java:4980) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728) 
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677) 
    at javax.swing.RepaintManager.access$700(RepaintManager.java:59) 
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705) 
    at java.awt.EventQueue.access$000(EventQueue.java:101) 
    at java.awt.EventQueue$3.run(EventQueue.java:666) 
    at java.awt.EventQueue$3.run(EventQueue.java:664) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:675) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 
8 
8 
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 1 
    at java.util.Vector.elementAt(Vector.java:470) 
    at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:649) 
    at javax.swing.JTable.getValueAt(JTable.java:2720) 
    at javax.swing.JTable.prepareRenderer(JTable.java:5718) 
    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:5221) 
    at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295) 
    at javax.swing.RepaintManager.paint(RepaintManager.java:1206) 
    at javax.swing.JComponent._paintImmediately(JComponent.java:5169) 
    at javax.swing.JComponent.paintImmediately(JComponent.java:4980) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728) 
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677) 
    at javax.swing.RepaintManager.access$700(RepaintManager.java:59) 
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705) 
    at java.awt.EventQueue.access$000(EventQueue.java:101) 
    at java.awt.EventQueue$3.run(EventQueue.java:666) 
    at java.awt.EventQueue$3.run(EventQueue.java:664) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:675) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 1 
    at java.util.Vector.elementAt(Vector.java:470) 
    at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:649) 
    at javax.swing.JTable.getValueAt(JTable.java:2720) 
    at javax.swing.JTable.prepareRenderer(JTable.java:5718) 
    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:5221) 
    at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295) 
    at javax.swing.RepaintManager.paint(RepaintManager.java:1206) 
    at javax.swing.JComponent._paintImmediately(JComponent.java:5169) 
    at javax.swing.JComponent.paintImmediately(JComponent.java:4980) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728) 
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677) 
    at javax.swing.RepaintManager.access$700(RepaintManager.java:59) 
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705) 
    at java.awt.EventQueue.access$000(EventQueue.java:101) 
    at java.awt.EventQueue$3.run(EventQueue.java:666) 
    at java.awt.EventQueue$3.run(EventQueue.java:664) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:675) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 1 
    at java.util.Vector.elementAt(Vector.java:470) 
    at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:649) 
    at javax.swing.JTable.getValueAt(JTable.java:2720) 
    at javax.swing.JTable.prepareRenderer(JTable.java:5718) 
    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:5221) 
    at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295) 
    at javax.swing.RepaintManager.paint(RepaintManager.java:1206) 
    at javax.swing.JComponent._paintImmediately(JComponent.java:5169) 
    at javax.swing.JComponent.paintImmediately(JComponent.java:4980) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728) 
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677) 
    at javax.swing.RepaintManager.access$700(RepaintManager.java:59) 
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705) 
    at java.awt.EventQueue.access$000(EventQueue.java:101) 
    at java.awt.EventQueue$3.run(EventQueue.java:666) 
    at java.awt.EventQueue$3.run(EventQueue.java:664) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:675) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 2 >= 1 
    at java.util.Vector.elementAt(Vector.java:470) 
    at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:649) 
    at javax.swing.JTable.getValueAt(JTable.java:2720) 
    at javax.swing.JTable.prepareRenderer(JTable.java:5718) 
    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:5221) 
    at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295) 
    at javax.swing.RepaintManager.paint(RepaintManager.java:1206) 
    at javax.swing.JComponent._paintImmediately(JComponent.java:5169) 
    at javax.swing.JComponent.paintImmediately(JComponent.java:4980) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728) 
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677) 
    at javax.swing.RepaintManager.access$700(RepaintManager.java:59) 
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705) 
    at java.awt.EventQueue.access$000(EventQueue.java:101) 
    at java.awt.EventQueue$3.run(EventQueue.java:666) 
    at java.awt.EventQueue$3.run(EventQueue.java:664) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:675) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 4 >= 1 
    at java.util.Vector.elementAt(Vector.java:470) 
    at javax.swing.table.DefaultTableModel.getValueAt(DefaultTableModel.java:649) 
    at javax.swing.JTable.getValueAt(JTable.java:2720) 
    at javax.swing.JTable.prepareRenderer(JTable.java:5718) 
    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:5221) 
    at javax.swing.BufferStrategyPaintManager.paint(BufferStrategyPaintManager.java:295) 
    at javax.swing.RepaintManager.paint(RepaintManager.java:1206) 
    at javax.swing.JComponent._paintImmediately(JComponent.java:5169) 
    at javax.swing.JComponent.paintImmediately(JComponent.java:4980) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:770) 
    at javax.swing.RepaintManager.paintDirtyRegions(RepaintManager.java:728) 
    at javax.swing.RepaintManager.prePaintDirtyRegions(RepaintManager.java:677) 
    at javax.swing.RepaintManager.access$700(RepaintManager.java:59) 
    at javax.swing.RepaintManager$ProcessingRunnable.run(RepaintManager.java:1621) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705) 
    at java.awt.EventQueue.access$000(EventQueue.java:101) 
    at java.awt.EventQueue$3.run(EventQueue.java:666) 
    at java.awt.EventQueue$3.run(EventQueue.java:664) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:675) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:90) 
+0

这意味着在'VECTOR' 1元,而你试图在位置插入元素6. – Keppil 2012-08-13 23:18:23

+0

THKS,得到的答案,只是不得不做出分拣空。对MadProgrammer。 – 2012-08-13 23:42:32

回答

5

首先,请不要使用KeyListeners,如果你想这样的的行动,使用ActionListener - 有100个原因为什么,但现在,只是相信我们;)

尝试设置分拣机为空之前更改模型

jTable1.setRowSorter(null); 

我通常遇到这个问题,原因是多个线程尝试更新模型不同步导致的突变事件。

+0

非常感谢MadProgrammer,解决了这个问题。您也正确地说我有这个突变问题。是的,我将尝试从现在开始使用actionlistener。 – 2012-08-13 23:40:05

+0

这是烦人的问题,花了我几个月的时间来追踪它:P – MadProgrammer 2012-08-13 23:41:31

+0

雅我过去几天也为此粉碎了我的头几次。 :) – 2012-08-13 23:44:37

2

挖一点(总是当我有时间和一些困惑我:-)

第一:@ MadProgrammer的答案是正确的 - 当且仅当客户端代码利用的责任,保持分拣和模型同步本身,而不是把这种负担委托给桌子。

服用负担

客户端代码:

TableModel model = .. //create some model; 
table.setModel(model); 
table.setRowSorter(new TableRowSorter(model)); 
// has to remove the rowSorter _before_ setting a new model 
// because the old rowSorter still references the old model 
table.setRowSorter(null); 
TableModel newModel = ... // create some model ; 
table.setModel(newModel); 
table.setRowSorter(new TableRowSorter(newModel); 

让表照顾:

table.setAutoCreateRowSorter(); 
TableModel model = .. //create some model; 
table.setModel(model); 
// nothing to fear, simply set the new 
TableModel newModel = ... // create some model ; 
table.setModel(newModel); 

BTW:在OP的情况下,就没有必要重新设置模型 - 这是基本相同,只是不同的数据。所以

// initially setting the model and rowSorter (in populate) 
... 
// in re-populating, instead of re-creating the same model 
//table.setModel(newModel); 
// clear 
((DefaultTableModel) table.getModel()).setRowCount(0); 
... 
// and - while we are at it - cleanup the logic 
while(result.next()) { 
    Object[] rowData = {result.getInt("emp_id"), 
     result.getString("emp_name"), result.getString("emp_address")}; 
    ((DefaultTableModel) jTable1.getModel()).addRow(rowData); 
}