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); ... } ... }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 ?
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); } ... }
Merci d'avance pour vos réponses !
Partager