0

jxtable のテーブルモデルに行を追加する際に問題が発生しました。

次の例外がスローされます。

Exception in thread "Thread-9" java.lang.IndexOutOfBoundsException: Invalid range
at javax.swing.DefaultRowSorter.checkAgainstModel(DefaultRowSorter.java:904)
at javax.swing.DefaultRowSorter.rowsInserted(DefaultRowSorter.java:844)
at javax.swing.JTable.notifySorter(JTable.java:4258)
at javax.swing.JTable.sortedTableChanged(JTable.java:4106)
at javax.swing.JTable.tableChanged(JTable.java:4383)
at org.jdesktop.swingx.JXTable.tableChanged(JXTable.java:1524)
at javax.swing.table.AbstractTableModel.fireTableChanged(AbstractTableModel.java:280)
at javax.swing.table.AbstractTableModel.fireTableRowsInserted(AbstractTableModel.java:215)
at javax.swing.table.DefaultTableModel.insertRow(DefaultTableModel.java:359)
at javax.swing.table.DefaultTableModel.addRow(DefaultTableModel.java:333)
at javax.swing.table.DefaultTableModel.addRow(DefaultTableModel.java:344)
at de.mudisar.MainWindow.addRow(MainWindow.java:2358)
at de.mudisar.dataloader.SelectionDataLoader.run(SelectionDataLoader.java:46)

スレッドからモデルを埋めるメソッドを呼び出します。これは、10000 を超えるエントリになる可能性があるためです。そうしないと、プログラムがフリーズします。

コードを貼り付けることができず申し訳ありませんが、これは私の会社では非常に重要です。

私が行う場合、例外はその行に来ます:

infomodel.addRow(new Object[{1,2,3,4,5,6,7,8});

この例外が発生する理由を誰か知っていますか?

最高の

4

2 に答える 2

3
Exception in thread "Thread-9" java.lang.IndexOutOfBoundsException: Invalid range
at javax.swing.DefaultRowSorter.checkAgainstModel(DefaultRowSorter.java:904)
at javax.swing.DefaultRowSorter.rowsInserted(DefaultRowSorter.java:844)
at javax.swing.JTable.notifySorter(JTable.java:4258)

Thread-9EDTのようには聞こえません。EDT の別のスレッドのテーブルに既に配置されているモデルを変更しないでください。詳細については、Swing の同時実行のチュートリアルを参照してください。

SwingUtilities.invokeLaterたとえば、EDT の更新をスケジュールするために使用できます。または、モデル全体を再設定する必要がある場合はTableModel、ワーカー スレッドで新しいモデルを作成し、EDT で一度にモデルを置き換える方が簡単な場合があります。

于 2012-09-26T12:50:10.000 に答える
1

たぶん、あなたは行にあまりにも多くの列を追加します-モデルにあるよりも多く。

于 2012-09-26T11:31:07.853 に答える