IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDT/SwingWorker Java Discussion :

Blocage de l'application


Sujet :

EDT/SwingWorker Java

  1. #1
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    Février 2009
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Devops
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 474
    Points : 843
    Points
    843
    Par défaut Blocage de l'application
    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 :

    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);
    			}
    		}
    	}					
    });
    Il me semble que toutes les modifications graphiques sont faites dans l'EDT.

    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 !

  2. #2
    Membre éclairé Avatar de Julien Bodin
    Homme Profil pro
    Devops
    Inscrit en
    Février 2009
    Messages
    474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Devops
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2009
    Messages : 474
    Points : 843
    Points
    843
    Par défaut
    Je viens de trouver la solution.

    C'est un problème que j'ai découvert récemment et je trouvais ça étrange de ne pas l'avoir débusqué plus tôt, et pour cause : le responsable était un bout de code que j'ai ajouté la semaine dernière.

    J'utilise énormément jdbc dans mon application et pour me donner bonne conscience quant à la gestion des ressources j'ai mis en place un pool de connexions avec DBCP (de chez apache). Or ce pool s'est vite saturé et lorsqu'il y avait trop de connexion ouverte il attendait qu'une connexion se libère.

    Je comprend mieux maintenant pourquoi cela bloquait au bout de 4-5 évènements ItemStateChanger : le pool était rempli.

    Maintenant que j'ai revu ce problème je n'ai plus de blocage inexpliqués

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Invoke - Blocage de l'application incompréhensible
    Par BestFF dans le forum Général Dotnet
    Réponses: 8
    Dernier message: 16/07/2008, 12h39
  2. Blocage d'une application Console
    Par Pilloutou dans le forum C#
    Réponses: 5
    Dernier message: 08/04/2007, 19h43
  3. blocage de l'application avec javax.comm
    Par caloun62 dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 19/03/2007, 19h59
  4. Blocage même avec Application.ProcessMessages
    Par Sub0 dans le forum Delphi
    Réponses: 7
    Dernier message: 31/01/2007, 05h13
  5. [WIN2000][JAVA]blocage de l'application
    Par narmataru dans le forum InterBase
    Réponses: 9
    Dernier message: 09/12/2003, 13h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo