Titre original : [Thread] Thread, PopUp et EDT : je suis perdu
Je commence à mélanger un peu tout et la fatigue aidant, j'abime plus mon code qu'autre chose. Je vais donc essayer d'expliquer le plus clairement possible mon problème qui je pense, est surtout un problème de conception.
J'ai une frame principale dans laquelle j'affiche une JTreeTable.
Quand la JTreeTable se construit, je fais des actions sur certains types de fichiers et ces actions prennent du temps. Je souhaite donc faire une barre de progression de type indéterminé (je ne connais pas le temps d'execution) qui apparait dans une fenetre type popup.
Voici ce que j'ai compris que je devais faire par rapport aux thread/popup/edt : il faut que je mette les actions qui prennent du temps (celles sur les fichiers d'un type précis) dans un Thread. Pour ne pas avoir de problème d'affichage, il faut que je mette la fenetre PopUp dans l'edt en utilisant un Runnable et invokeLater. J'utilise le code suivant pour cela :
Travail execute l'action sur le fichier du type demandé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 Runnable popUp = new Runnable() { public void run() { PopUpInfo fen = new PopUpInfo(); // fen.dispose(); } }; SwingUtilities.invokeLater(popUp); Thread t = new Travail(path); t.start();
Au final, ce qu'il se passe, c'est que j'ai bien ma frame principale en fond et une fenetre popup par dessus. L'action de Travail est bien executé. MAIS l'affichage de la frame principale n'est pas fait (je dois fermer la popup et reduire puis afficher pour l'avoir). Alors, je sais que je n'ai pas insérer de moyen de fermer la popup une fois que j'ai terminé mon thread mais je ne crois pas que ce soit ça qui foute mon affichage par terre.
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 class Travail extends Thread { private String path; public Travail(String path) { this.path = path; } public void run() { int nombre = 1; String ligne; BufferedReader fichier; try { fichier = new BufferedReader(new FileReader(path)); while ((ligne = fichier.readLine()) != null) { if(ligne.startsWith("$$$$")) nombrel++; } listeIndex.add(nombre); fichier.close(); } catch(Exception err){System.out.println(" Exception Fichier "+ path);} } }
Après, j'ai commencé à reflechir sur ce que je devais mettre dans le thread et je me demande si je ne dois pas y mettre egalement la jtreetable (en cherchant sur le forum, j'ai trouvé quelqu'un qui le faisait) ? Mais pour moi, la jtreetable, c'est de l'affichage donc ça doit être dans l'edt.
Il y a aussi le invokeLater : je pensais que ça servait à modifier un element de l'affichage graphique à partir d'un thread mais au vu d'autres posts, ça n'a pas l'air d'être que ça.
Enfin bref, je suis un peu perdu dans toutes ces notions et j'ai beau lire les faq et les différents posts, ça n'est pas clair dans ma tete et je n'arrive pas du coup à bien structurer mon code. Merci pour votre aide, j'en ai bien besoin![]()
Partager