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

AWT/Swing Java Discussion :

[Pb de Concurrence] fenêtre job effectué


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 136
    Points : 72
    Points
    72
    Par défaut [Pb de Concurrence] fenêtre job effectué
    Salut à tous,

    Mon programme Java exécute un travail qui peut être lent, donc je veux afficher une fenêtre qui montre l'avancement du travail (10%, 50%, 100%).

    J'ai donc une Frame AWT et j'appelle la méthode repaint() successivement pour y redessiner une "barre d'avancement" chaque fois que le job a avancé d'une étape.

    Le problème c'est que la barre ne se dessine pas pendant que le job est en cours, et se dessine tout d'un coup lorsque le job a fini ! J'imagine que c'est un problème de concurrence. Lorsqu'un calcul "lourd" est effectué, la VM "oublie" de mettre à jour les fenêtres, qui représentent un travail secondaire.

    La question est: existe une solution simple qui évite d'utiliser les wait() et notify() avec deux thread différents (solution un peu compliquée pour moi ) ?

    Merci d'avance

  2. #2
    Membre extrêmement actif Avatar de jojodu31
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2008
    Messages : 875
    Points : 814
    Points
    814
    Par défaut
    ici

    tu vas te faire taper sur les doigts
    Heureux soient les fêlés, car ils laisseront passer la lumière.

    Mieux vaut fermer sa gueule et passer pour un con que l'ouvrir et ne laisser aucun doute à ce sujet.

    Cours et tutoriels pour apprendre Java , FAQ Java, et Forum Java

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    http://java.developpez.com/faq/gui/?...E_progress_bar

    Même s'il ne s'agit pas du même toolkit, le problème est exactement le même
    Hey, this is mine. That's mine. All this is mine. I'm claiming all this as mine. Except that bit. I don't want that bit. But all the rest of this is mine. Hey, this has been a really good day. I've eaten five times, I've slept six times, and I've made a lot of things mine. Tomorrow, I'm gonna see if I can't have sex with something.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Ton principe est bon, la seule chose c'est que tu effectue ton travail "lourd" probablement au sein du thread AWT (soit à un actionListener probablement) au lieu de le faire sur un Thread séparé. repaint() ne fait que mettre dans la pile AWT l'ordre de redessiner, mais cet évènement ne sera extrait de la pile que lorsque l'action listener aura fini son boulot, donc uniquement lorsque ton travail lourd sera fini.

    Le plus simple c'est de prendre tout ton bloc actuelle, on va l'appeler X, qui fait travail lourd + repaint() et d'en faire çà:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Thread t = new Thread(){
        public void run(){
            X
        }
    };
    t.start();
    Et PAF sur les doigts , parce que c'est dans la FAQ çà

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 136
    Points : 72
    Points
    72
    Par défaut
    Ok merci, je vais regarder l'exemple de la progress bar

    Désolé donc pour le thread inutile

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

Discussions similaires

  1. effectuer un téléchargement puis fermer une fenêtre
    Par newbiegeek dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 07/08/2007, 12h08
  2. Enregistrer les actions effectuée sur une fenêtre
    Par netomax dans le forum WinDev
    Réponses: 5
    Dernier message: 25/04/2007, 21h11
  3. Réponses: 20
    Dernier message: 01/12/2006, 22h29
  4. Fenêtre d'execution des Jobs sur SQL
    Par fkgueye dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 20/12/2005, 15h50
  5. Effectuer une tâche à la fermeture de la fenêtre
    Par onipif dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 27/09/2005, 16h57

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