Bonjour,
Je me permet un petit post car je galère a comprendre comment remonter les exceptions issues d’un SwingWorker.
J'ai commencé par le tuto http://rom.developpez.com/java-swingworker/
du coup j'ai compris que je pouvais récupérer les exceptions avec le get() mais qu'il fallait éviter de l'appeler dans l'edt (effectivement la barre de progression ne s'affiche pas).
il y a aussi l'appel du get() dans le donne() et traiter les erreurs à ce niveau (mais j'aimerai que le contrôleur de vue affiche un message d'erreur à l’utilisateur).
J'ai également trouvé ce "better SwingWorkers" http://blog.developpez.com/adiguba/p...r_swingworkers, mais la j'avoue ne pas avoir compris la plus-value par rapport au get() dans le donne().

Mon problème est que j'ai plusieurs fenêtres qui peuvent appeler un traitement long (numériser un document)
j'ai une classe qui permet de centraliser les actions communes, qui initialise le SwingWorker et qui throw une exception en cas d'erreur
Code :Sélectionner tout -Visualiser dans une fenêtre à part
1
2
3
4
5
6
public void importDocumentScan(Lot lot,boolean param) throws ScannerException {
...
                               SwCreateDoc sw = new SwCreateDoc(st.getListeImage(), lot, vue, ControleurAppli.getEnvAppli().getTypeImportMim().equals(TypeImportMim.bloc));
                               sw.execute();
                               // le sw.get() ici permettrai de traiter l'affichage de l'erreur par l'ihm
}

seulement je ne sais pas comment m'y prendre pour remonter une erreur éventuelle à l'IHM

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
public class SwCreateDoc extends SwingWorker<List<DocumentSas>, DocumentSas> implements ObsAbleAddDocJt{
 ...               
public SwCreateDoc(List<?> input, Lot lot, JFrame parent, boolean bloc) {
...
                }             
 
                @Override
                protected List<DocumentSas> doInBackground() throws Exception {}
 
                @Override
                protected void process(List<DocumentSas> chunks) {
                               super.process(chunks);                            
                }
 
                @Override
                protected void done() {
                               super.done();
                               ...
                               try {
                                               get();
                               } catch (InterruptedException | ExecutionException e) {
                                               log.error("erreur lors de la créarion des documentsSas");
                                               log.debug(e.getMessage());
                                              // Dans le principe j'aimerai bien faire un throw ici 
                               }                            
                }

Existe t-il un moyen de m'en sortir, ou faut-il que je me résigne a afficher les messages d'erreur dans le done()?