Bonjour à tous !
J'ai découvert un problème dans l'application que je développe et je soupçonne des problèmes avec l'EDT.
J'ai l'impression que quand j'utilise trop intensivement mes composants graphique il arrive un moment où mon application se fige complètement.
Par exemple, j'ai une JTable qui contient environ 13 000 enregistrements et si je "m'amuse" à lancer plusieurs tri successivement (en cliquant sur les colonnes) j'arrive à bloquer l'application.
Autre cas : J'ai une JCombobox qui contient une liste de Code Nafs. Chaque code naf est située dans une "Catégorie" (un simple nom en fait, c'était pour simplifier la gestion des codes Naf).
Cette combobox est modifée pour pouvoir gérer l'autocomplétion et l'affichage d'une liste filtrée en fonction de ce que je tape dedans (si je tape '01' je n'ai que des code nafs qui commencent par 01 qui s'affichent). Si je tape '01' et que je descends ma sélection avec la flèche du bas il arrive un moment (en fait après 5 appuis, je ne sais pas pourquoi) où mon application se fige complètement.
Voici pourtant le code de l'évènement ItemStateChanger de ma combobox :
Il me semble que toutes les modifications graphiques sont faites dans l'EDT.
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54 cmbNAF.addItemListener(new ItemListener() { public void itemStateChanged(ItemEvent evt) { if(evt.getStateChange() == ItemEvent.DESELECTED) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { ovNaf.setOverlayVisible(false); //Affiche lblCategorie.setText("Aucune catégorie"); } }); } else { try { Thread t = new Thread(new Runnable() { @Override public void run() { Naf naf = (Naf) cmbNAF.getSelectedItem(); if(lstCats.indexOf(naf) != -1) { final CategoriePerso cat = findByNAF(naf); ovNaf.setOverlayVisible(false); SwingUtilities.invokeLater(new Runnable() { @Override public void run() { if(cat != null) { lblCategorie.setText(cat.getNom()); } else { lblCategorie.setText("Aucune catégorie"); } } }); } else { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { ovNaf.setOverlayVisible(true); } }); } } }); t.run(); } catch (Exception e) { e.printStackTrace(); ovNaf.setOverlayVisible(true); } } } });
Et j'ai ce genre de problème un peu partout dans mon application. Je viens seulement de m'en rendre compte (on a poussé un peu plus les tests) et la mise en prod est pour bientôt
D'où vient le problème à votre avis ? L'EDT se bloque dès qu'on l'embête un peu ou c'est autre chose ?
Ce que j'ai du mal à comprendre c'est que l'application est complètement bloquée et non simplement ralentie (ou semblant peu réactive) ce qui est généralement symptômatique d'un problème avec l'EDT.
En tous cas impossible d'utiliser mon application plus de 5 minutes, elle fige trop souvent.
Je vous remercie d'avance pour votre aide !
Partager