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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.