[Windows] SwingUtilities.invokeLater ralentit mon programme
bonjour,
je ne sais pas vraiment où placer ce post.
mon problème concerne la perte de contrôle d'un programme : j'ai créé un Timer dont la méthode run() est appelée une fois par heure (pour les tests c'est toutes les 20s); la création du timer se fait dans le constructeur d'une classe qui est "conteneur" d'une fenêtre (elle a été créée par eclipse et son plugin windowBuilder), par cet appel :
Code:
1 2 3 4 5 6 7 8
| public Ecran_principal() {
initialize();
this.frame.setVisible(true);
myTimer.schedule(new Loop(this), 0, 20000);
} |
la classe Loop contient donc une méthode run(), qui est le programme principal : accès à deux bases de données et à une JTable de la fenêtre dont je parlais tantôt.
je voudrais implémenter le comportement suivant : attendre 5mn (le temps qu'un SMS soit envoyé par le programme) pour récupérer le code de retour de ce SMS.
j'ai pensé à ceci :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| new Thread(new Runnable() {
public void run() {
SwingUtilities.invokeLater(new Runnable() {
ArrayList<Map<String, Object>> al_5 = null;
public void run() {
// attendre 5mn
try {
Thread.sleep(1000 * 60*5);
} catch (InterruptedException e) {
System.out.println(e);
} |
mais cela bloque l'accès à la table (le programme ne réponds que de temps en temps), c'est génant.
même le clic sur le bouton "exit" mets du temps.
auriez-vous des conseils?
merci,
olivier
ps: la méthode appelée toutes les 5mn (dans invokeLater) contient des appels à une base, et modifie la JTable.