swingworker et méthode done().
bonjour, dans ma classe Controleur, j'ai défini une méthode valider() qui est invoquée quand on veut valider les données saisies depuis x écrans (classes MonEcran1, MonEcran2 ...).
Elle lance un swingWorker, qui a une méthode Void doInBackGround() qui contient une méthode abstraite traitementLent(), laquelle est implémentée différemment selon les écrans.
Dans chaque écran, traitementLent() manipule des objets différents.
Et chaque écran implémente aussi une méthode miseAJourEdt(), exécutée depuis done() une fois traitementLent() terminé, et aura besoin de données calculées dans traitementLent().
Question : les objets calculés par traitementLent() doivent ils forcément être retournés par traitementLent() (+ ajout de get()) si je veux les utiliser dans le done() ? dans le cas MonEcran1, panel.add(graphe) plante parfois en null pointer.
Code:
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
| class Controleur{
void valider(){
new Worker(Void, Void).execute();
}
}
public class Worker extends SwingWorker(Void,Void){
@overide
Void doInBackground(){
traitementLent();
}
@overide
Void done(){
miseAJourEdt();
}
}
public class MonEcran1 {
jpanel Panel,JFreeChart graphe;
@overide
void traitementLent(){
graphe = fabriqueGraphe();// traitement lent
}
@overide
void miseAJourEdt(){
panel.add(graphe);// traitement EDT
}
}
public class MonEcran2 {
...
@overide
void traitementLent(){
...()// traitement lent
}
@overide
void miseAJourEdt(){
...// traitement EDT
}
} |