У меня есть Observer TableModel, которая прослушивает некоторые изменения, выполненные в базе данных, и когда это так, вызывается метод обновления, приведенный ниже.
Моя проблема заключается в том, как я должен предотвратить ошибки, такие как:
java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.set(ArrayList.java:337)
at com.mysimpatico.memoplatform.persistenceui.MeaningsViewerTopComponent$DefaultTableModelImpl.update(MeaningsViewerTopComponent.java:108)
Я не понимаю, как SwingWorker мог бы помочь. Я выполняю долгосрочную задачу базы данных в отдельном потоке, но это вызывает метод (база данных сохраняется) в классе Observable, который уведомляет наблюдателей.
@Override
public void update(Observable o, final Object arg) {
final Meaning meng = (Meaning) arg;
final int row;
final boolean insert;
synchronized (mengs) {
if (mengs.contains(meng)) {
row = meng.getObjId();
mengs.set(row, meng);
insert = false;
} else {
row = mengs.size();
mengs.add(row, meng); //last
insert = true;
}
try {
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
if (insert) {
fireTableRowsInserted(row, row);
} else {
fireTableRowsUpdated(row, row);
}
}
});
} catch (InterruptedException ex) {
Exceptions.printStackTrace(ex);
} catch (InvocationTargetException ex) {
Exceptions.printStackTrace(ex);
}
}
}