Bonjour,

J'utilise une WeakHashMap pour stocker mes items de liste JList, et il arrive, à de rares occasions, de me retrouver devant un NullPointerException, que j'aimerais éviter.
Voici le code incriminé (la classe est un ListCellRenderer) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private WeakHashMap<Integer, Item> renderer = new WeakHashMap<Integer, Item>();
...
 
public Component getListCellRendererComponent(JList list, Object value, int index, boolean selected, boolean cellHasFocus) {
    ...
    if (value instanceof Employee) {
        if (renderer.get(index)==null) {
            renderer.put(index), new Item((Employee)value, false, selected));
        }
        Item item = renderer.get(index);
        // Le NullPointerException a lieu à la ligne suivante :
        item.setEmployee((Employee)value);
        ...
        return item;
    }
    ...
}
Pour moi le WeakHashMap a déréférencé un élément au mauvais moment. Lorsque j'actualise ma liste, je vide bien sûr ma variable renderer, mais je ne pense pas qu'il s'agisse d'un problème de synchronisation à ce niveau.

Qu'en pensez-vous ? Je ne vois pas comment protéger ma liste à ce niveau.

En vous remerciant.