Bonjour,

J'ai un viewer qui affiche énormément de données du coup j'ai implémenté un ILazyContentProvider, ça marche très bien !
Je calcule la taille de mon tableau et je charge que quelques lignes et quand l'utilisateur scroll si l’élément n'existe pas à l'index i je recharge la partie du viewer qui correspond à l'index i.
Si l'utilisateur y va doucement et qu'il bourrine pas tout va bien !
Par contre s'il clique 12 fois un peu n'importe où dans le scroll ça plante, j'ai un nullpointer ...

Du coup je me suis dis qu'il fallait que je bloque l'update pour que rien ne puisse être fait pendant que je mettais à jour mes nouvelles données (ça peut prendre 1/2 sec), du coup j'ai fait ça :
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
18
19
20
21
22
23
24
25
26
27
28
29
30
private class MacroContentProvider implements ILazyContentProvider{
 
  private TableViewer viewer;
  private ArrayList<NexusTrace> traceElements;
 
  public MacroContentProvider(TableViewer viewer) {
     this.viewer = viewer;  
  }
 
  @Override
  public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
     this.traceElements = ( ArrayList<NexusTrace>) newInput;
  }
 
  @Override
  public void updateElement(int index) {
    Lock l = new ReentrantLock();
    l.lock();
    try{
      // cherche si à l'index 'index' si l'élément est nul
      if(findforNexusTrace(index, traceElements) == null)
          // charge les nouveaux éléments ... simplifié pour le post
          traceElements = loadData(index);
 
      viewer.replace(findforNexusTrace(index, traceElements), index);
    }finally{
      l.unlock();
    }
  }
}
Mais visiblement mon Lock ne suffit pas ...
Une autre idée ?

Merci
Chris