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

Interfaces Graphiques en Java Discussion :

Problème de rafraichissement .. [FAQ]


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 26
    Par défaut Problème de rafraichissement ..
    Bonjour.

    Mon IHM contient une console (JTextArea où sont redirigié tous les "system.out.println").

    J'ouvre un fichier grace à un JFileChooser et j'effectue directement unopération traitment (d'une autre clases) qui dure un certain temps.

    Le problème est que normament le JFile Chooser doit se fermer et on devrait voir les afficher des commentaires sur le traitement en question dans la console en temps réel. Or la fenetre du JFileChooser de vient toute grise et se "bloque" devant mon IHM. Elle disparait à la fin de mon traitement et mes commentaire sur celui ci arrivent d'une traite dans la console.

    Comment aire pour palier à ce problème ?

    Merci d'avance !

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu dois surement effectuer la lecture du fichier dans l'EDT, ce qui l'empêche de mettre à jour l'affichage. Tu dois utiliser un autre thread, ou mieux, la classe SwingWorker (pas encore standard)

    Un peu de lecture sur une des bases de la programmation AWT/Swing : Threads et performance avec Swing

    a++

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 26
    Par défaut
    Il me semblait bien que c'était un problème de thread.

    Merci pour ces informations.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 26
    Par défaut
    Quel seraient les problèmes si j'utilise SwingWorker ?

    A quoi doit je faire attention?

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Adrien22
    Quel seraient les problèmes si j'utilise SwingWorker ?
    Ben normalement SwingWorker est là pour t'éviter les problèmes, en séparant bien les tâches "lourdes" à exécuter dans un thread séparé, et les tâches de mises à jour de l'affichage à exécuter dans l'EDT...


    Quel est ta version de Java ???

    a++

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 26
    Par défaut
    Citation Envoyé par adiGuba
    Quel est ta version de Java ???
    j2sdk1.4.2_09

    Les problème dont je parlais, était à propos de cela

    Apparement cette classe est disponible sur le site de SUN.

    (Elle est incluse dans J2EE sinon ?)

  7. #7
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Je ne pense pas qu'elle soit incluse dans J2EE, car J2EE n'a pas grand chose à voir avec Swing...

    Tu trouvera cette classe sur swinglabs

  8. #8
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Adrien22
    Apparement cette classe est disponible sur le site de SUN.
    Oui c'est une très ancienne classe, proposé dans un tutoriel Swing de 1998 : http://java.sun.com/products/jfc/tsc.../threads1.html

    Elle a depuis énormement évolué pour prendre en compte les nouveautés de Java 5.0 (Generics et API de concurrence entre autres) : https://swingworker.dev.java.net/

    C'est cette dernière version qui sera intégré en standard dans Java 6.0...



    Comme tu n'utilises que Java 1.4 tu ne peut pas utilisé la dernière version, mais seulement la première, que tu peux télécharger ici : http://java.sun.com/products/jfc/tsc...ingWorker.java

    Il te suffit de copier cette classe dans un de tes packages. A la rigueur tu peux la modifier en déclarant toutes les méthodes en final (sauf construct() et finished()), ce qui pourrait t'éviter quelques erreurs...


    Ensuite, lorsque tu as un traitement long a exécuté, tu crées un nouvel objet héritant de SwingWorker, dont tu peux éventuellement utilisé le constructeur pour passer des paramètres.

    Tu redéfinis la méthode construct() (obligatoire), afin d'y effectuer ton traitement. A la fin de cette méhode tu peux eventuellement retourner un objet en résultat.

    Enfin tu peux également redéfinir la méthode finished(), qui sera appellé à la fin du traitement dans le thread de l'EDT (pour mettre à jours l'affichage donc).

    Une fois que ton SwingWorker est créé, il suffit d'appeller la méthode start() pour démarrer le traitement en tâche de fond...


    Par exemple :
    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
        public void actionPerformed(ActionEvent e) {
     
            // Création du SwingWorker
            SwingWorker worker = new SwingWorker() {
     
                // Cette méthode est appellé dans un thread séparé
                public Object construct() {
                    // Traitement long ICI
     
                    return unObjectResultat;                
                }
     
     
                // Cette méthode est appellé dans l'EDT
                public void finished() {
     
                    // On récupère le résultat de construct()
                    LeTypeReel obj = (LeTypeReel) getValue();
     
                    // Modification de l'interface graphique ICI
     
                }
            };
     
            // Démarrage de la tâche
            worker.start();
     
        }

    Le seul cas qui n'est pas géré, c'et si tu as besoin de modifier l'affichage pendant ton traitement long, dans ce cas il faudra faire appel à SwingUtilities.invokeLater()... (ce cas est géré dans la dernière version via les méthode publish() et process()).



    Citation Envoyé par Adrien22
    (Elle est incluse dans J2EE sinon ?)
    Non. J2EE c'est pour des applications serveurs. Il n'y a pas de Swing ni de GUI en général...

    a++

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 26
    Par défaut
    Oui je l'ai trouvé.

    @adiGuba: merci j'ai appris énormement de chose gràce a toi

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

Discussions similaires

  1. [MFC] Problème de rafraichissement,
    Par pykoon dans le forum MFC
    Réponses: 1
    Dernier message: 27/04/2005, 07h21
  2. Problème de rafraichissement.
    Par beyo dans le forum ASP
    Réponses: 5
    Dernier message: 18/03/2005, 16h27
  3. [SWING] Problème de rafraichissement
    Par david71 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 24/05/2004, 15h38
  4. [JTree]problème de rafraichissement
    Par peppena dans le forum Composants
    Réponses: 9
    Dernier message: 20/01/2004, 14h06
  5. Toujours un problème de rafraichissement de DBGrid
    Par tripper.dim dans le forum C++Builder
    Réponses: 4
    Dernier message: 09/12/2002, 13h15

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