Voici une méthode de AudienceListModel (qui extends AbstractListModel) qui rafraichi le contenu.
La liste (JList) est composée de JPanel (c'est une liste de panels).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| public void refresh() {
new Thread() {
public void run() {
int oldSize = list.size();
try {
AudienceXML.getInstance().init();
} catch(Exception e) { }
List<AudienceElementPanel> temp = new ArrayList<AudienceElementPanel>();
for(XMLChannel ch : AudienceXML.getInstance().getList())
temp.add(new AudienceElementPanel(ch));
Collections.sort(temp);
list = temp;
fireContentsChanged(AudienceListModel.this, 0, Math.max(getSize(), oldSize));
}
}.start();
} |
Comme vous pouvez le voir sur le code, pour rafraichir, je vire tout et recrée des Panels (AudienceElementPanel étend JPanel).
Le problème, c'est qu'en mémoire, les anciens AudienceElementPanel restent (il suffit de voir la mémoire utilisée par le processus).
Par contre, si j'enlève la ligne
fireContentsChanged(AudienceListModel.this, 0, Math.max(getSize(), oldSize));
, et bien le garbage collector fait bien son travail...
Comment faire pour qu'il le fasse bien aussi même si je fais le fireContentsChanged?
Partager