Bonjour à tous,
Voilà j'ai un léger souci sur mon SwingWorker et je ne comprend pas pourquoi.
J'ai créé une classe qui fusionne SwingWorker et ActionListener, cela donne ceci:
Mon problème est que j'ajoute cela à un bouton pour lancer des traitements en tant qu'ActionListener, cela fonctionne très bien... la première fois ! Si je clique sur le bouton une deuxième fois (après que tout le SwingWorker ait été correctement exécuté) la preAction est bien démarrée mais je ne passe jamais dans ma méthode doInBackGround()... Une idée de pourquoi ?
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 public abstract class AbstractMMIActionSwingWorker extends SwingWorker<Boolean, Boolean> implements ActionListener { private static final Logger LOGGER = Logger.getLogger(AbstractMMIActionSwingWorker.class); private ActionEvent event; public AbstractMMIActionSwingWorker() { super(); } public abstract void doInBackground(ActionEvent actionEvent) throws MMIException; public abstract void preAction(ActionEvent actionEvent) throws MMIException; public abstract void postAction(ActionEvent actionEvent) throws MMIException; /** * {@inheritDoc} */ @Override protected final Boolean doInBackground() throws Exception { try { LOGGER.info("AbstractMMIActionSwingWorker.doInBackground()"); doInBackground(event); } catch (MMIException e) { handleException(e); } return Boolean.TRUE; } /** * {@inheritDoc} */ @Override public void actionPerformed(ActionEvent e) { this.event = e; try { preAction(e); this.execute(); } catch (MMIException ex) { handleException(ex); } } /** * {@inheritDoc} */ @Override protected void done() { try { get(); postAction(event); } catch (MMIException | InterruptedException | ExecutionException e) { handleException(e); } } protected void handleException(Exception e) { LOGGER.error("Error", e); } }
Merci d'avance !
Partager