"Lew" <noone@lewscanon.com> wrote in message
news:hcc3s6$vhb$1@news.albasani.net...
Qu0ll wrote:
I am using a SwingWorker in the model class for the JList. What I am
basically doing is retrieving each row from a database in the
doInBackground() method and then when I have each row I add it to an
ArrayList and then call publish(). Then, in the process() method I
call fireIntervalAdded() with the index of each row loaded.
It looks like some kind of threading issue but I cannot see why there
would be a problem given that I am using SwingWorker which should
ensure that process() is called on the EDT.
Even without an SSCCE you could provide more information. It looks
like a memory model issue due to lack of synchronization on the
ArrayList.
Hi Lew,
The following is an outline of the relevant part of the list model
class. This code is not meant to compile, it's just meant to show the
strategy I have adopted.
private final List<Row> rows = Collections.synchronizedList(new
ArrayList<Row>());
private class DBLoader extends SwingWorker<Integer, Integer> {
@Override
protected Integer doInBackground() throws Exception {
...
while (moreData) {
// Get next row.
...
rows.add(row);
publish(rows.size() - 1);
}
return null;
}
@Override
protected void process(final List<Integer> chunks) {
for (final Integer i : chunks) {
fireIntervalAdded(this, i, i);
}
}
}
Are there any obvious problems with this strategy? I am sorry that I
cannot provide more detailed code.