1

AbstractTableModelのモデルとして使用するためにサブクラス化しましたJTable。データが追加されるたびfireTableRowsInserted()に、AWTスレッドを呼び出します。基になるコンテナへのすべてのアクセスは、同期されたメソッドを使用してスレッドセーフになります。

このパターンは、これまでのところうまく機能しています。ただし、スレッドの問題があることに気付いたリストからデータを削除したいと思います。行を削除fireTableRowsDeleted()してAWTスレッドを呼び出すとgetValueAt()、現在は存在しない行インデックスの呼び出しを取得できます。

AWTスレッドの外部のテーブルモデルで操作を実行するためのベストプラクティスは何ですか?

4

2 に答える 2

5

IMHOのベストプラクティスは、それを避けることです。Runnable内の別のスレッドからモデルへのすべてのアクセスをラップし、モデルのSwingUtilities.invokeLater更新に使用します。

于 2011-07-12T19:52:07.490 に答える
1

EDTからデータを削除する必要があります。変更イベントを発生させる操作はすべてAbstractTableModel、EDTで実行する必要があります。

于 2011-07-12T19:55:27.543 に答える