1
私のモデルはAbstractListModelを拡張したMVCパターンとして設計されたプログラムを持っています。 私は私のモデルに新しいユーザーを追加使用、次のコードです:自分自身でfireIntervalAddedモデルは常にJListを更新しません
public synchronized void addUser(User u) {
if (!users.contains(u)) {
users.add(u);
Collections.sort(users);
//fire
fireIntervalAdded(ListDataEvent.INTERVAL_ADDED, getSize(), getSize());
}
}
そして、それは時々、正常に動作します。しかし、JListは常に更新していません。時にはそれは動作し、時には...何か手がかりはありませんか?そしてもちろん、ユーザーは常にモデルに追加された追加イムが、fireIntervalAdded/JListの
EDITに何か問題があります:私は、次のコードを変更した場合:それは完璧に動作します
public void addUser(final User u) {
if (!users.contains(u)) {
users.add(u);
Collections.sort(users);
}
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
fireIntervalAdded(this, getSize(), getSize());
}
});
}
。それで問題は、火事のことをしたEDTがそれではなかったということでした。 Thx!今私はそれを素直なコードにするように書き直します。
それは同期の問題だろうか? 'AbstractListModel'や' JList'には何も問題はないでしょう。 –
編集:うーん。私はちょうどモデルのすべての同期を削除しました。しかし、それでもランダムなバグ:(メソッドaddUserは別のスレッド(スイングスレッドではない)から呼び出されます – joxxe
モデルはEDTから更新する必要があります – camickr