"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.