Bonjour à tous,
J'ai une petite question concernant les Thread. Je souhaite consulter un champ dans une base de données, cependant, pour l'instant, cela me fige toute mon interface graphique (en SWING). Je souhaite donc implémenter un Thread pour la recherche de mon champ dans la base de données (et en même temps afficher une fenêtre dans mon interface graphique qui affiche une animation montrant que la recherche dans la base de données est en cours).
Voici ma question, est-ce que ce type d'architecture pourrait fonctionner ?

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
 
public class maFenetre extends JFrame implements ActionListener {
    ...
    public void actionPerformed(ActionEvent e) {
        ...
        // Si on clique sur un bouton
 
        // On récupère le nom d'une personne depuis un JTextField nommé "monChampTexte" de maFenetre
        String nom = monChampTexte.getText();
        // On lance une nouvelle fenêtre affichant l'animation
        FenetreDAttente f = new FenetreDAttente();
        // On fait la recherche dans la base de données à partir d'un nom
        int id = gestionnaire.rechercheID(nom);
        // On ferme la fenêtre d'attente
        f.dispose();
        // On affiche l'id dans un JLabel de maFenetre
        monLabel.setText(id);
        ...
    }
    ...
}
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

public class Gestionnaire extends Runnable {
    // On déclare un attribut (résultat de la requête SQL)
    private int idClient = 0;
    ...
    public int rechercheID(String nom) {
        // On crée le thread
        Thread thread = new Thread(this);
        // On lance le thread
        thread.start();

        // A la fin de l'exécution du thread, est-ce qu'il rend la main ici ?
        // Ce qui m'arrangerait grandement pour renvoyer l'ID à maFenetre

        // On retourne l'idClient
        return idClient;
    }

    public void run() {
        // Tout le traitement de recherche dans la base de données
        // avec le retour du résultat qu'on enregistre dans idClient
        idClient = Integer.parseInt(resultatRequeteSql);
    }
    ...
}
Si cette architecture ne fonctionne pas, comment puis-je faire pour faire le traitement de la base de données en parallèle de l'affichage de maFenetre tout en renvoyant (depuis mon gestionnaire) à la fin l'idClient à maFenetre ?

Merci d'avance pour vos réponses !