2012-06-15 138 views
1

我有一個問題,刪除我的表中的所有行,我有一個jtable有jtable,當我選擇行時,它會顯示相應的行值,當我點擊同一面板上的另一個按鈕意味着它,將重裝該表,這裏的問題是,我得到異常如何刪除jtable中的所有行?

Exception in thread "AWT-EventQueue-0" 

    java.lang.ArrayIndexOutOfBoundsException: 0 >= 0 
     at java.util.Vector.elementAt(Unknown Source) 
     at javax.swing.table.DefaultTableModel.getValueAt(Unknown Source) 
     at javax.swing.JTable.getValueAt(Unknown Source) 
     at Testsample$16.valueChanged(Testsample.java:1516) 

我幾乎使用所有的方法在表 刪除行,現在我用這個方法

while (table.getRowCount() > 0) { 
        ((DefaultTableModel) table.getModel()).removeRow(0); 
       } 

注:我使用兩種面板此示例應用程序時,所有controlls都在同它的一切工作正常,如果我設置在第二面板中的表裝置,它會拋出上面的異常,任何想法如何解決這個問題

回答

6

你所看到的異常是從Swing線程來(AWT-EventQueue的-0)。發生異常是因爲JTable在修改其他線程上的DefaultTableModel的同時正在繪製自己(在Swing線程上)。

不要那樣做!表格模型的所有更改都必須在Swing Thread上進行。

Last word in Swing Threads

使用EventQueue.invokeLater(new Runnable() {...});或類似的東西。

6

試試這個代碼..

DefaultTableModel dm = (DefaultTableModel)table.getModel(); 
dm.getDataVector().removeAllElements(); 
+0

這仍然可能導致他報告的異常,除非該代碼在Swing事件線程上執行。 – Enwired

2

這是我的方法:

DefaultTableModel model=(DefaultTableModel)table.getModel(); 
      int rc= model.getRowCount(); 
      for(int i = 0;i<rc;i++){ 
       model.removeRow(0); 
      }