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

Agents de placement/Fenêtres Java Discussion :

Problème de Thread/JFrame :/


Sujet :

Agents de placement/Fenêtres Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 104
    Par défaut Problème de Thread/JFrame :/
    Je ne sais pas trop comment qualifier mon problème

    J'ai une fonction qui fait des traitements longs :
    - copie d'un rep (~100Mo)
    - zip de se rep
    - envoie du rep

    J'aimerais que l'user soit mis au courant de ce qu'il se passe et où en est la fonction. Pour cela j'avais crée une frame toute simple avec 3 labels (Copie du répertoire - Compression du répertoire - Envoi du répertoire) qui implémentait l'interface runnable.
    A coté de ça, dans la fonction, je change la variable int "indic" à chaque fois que j'avance dans les étapes.
    Je lance donc la fonction. Cela lance la frame dans un nouveau thread qui "lit" en permanence (via un while()) cette variable et met à jour son affichage en fonction.

    Le problème est que ça ralentit considérablement la fonction :/
    Si je ne lance pas la JFrame, la copie prend 20s. Avec, elle en prend presque 2mn :/

    Que pouvez vous me conseiller pour faire ce que j'aimerais ? :d

  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,

    Citation Envoyé par Sylver---
    Pour cela j'avais crée une frame toute simple (...) qui implémentait l'interface runnable.
    Tu mélange un peu les genres là...

    Citation Envoyé par Sylver---
    Je lance donc la fonction. Cela lance la frame dans un nouveau thread qui "lit" en permanence (via un while()) cette variable et met à jour son affichage en fonction.
    C'est ce qui s'appelle une "attente active"... Déjà je pense que ce thread est inutile, mais en plus il prend tout le CPU simplement pour vérifier la valeur d'une variable...


    Une solution plus propre serait que ton traitement signale la mise à jour du champs à ta JFrame ou mieux à un listener... le tout en utilisant l'EDT...

    a++

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 104
    Par défaut
    Le problème est que je ne veux pas que ce soit la fonction de traitement qui mette à jour l'affichage de la frame car la méthode doit pouvoir fonctionner sans interface graphique. Je voulais donc faire "l'inverse" (que ce soit la frame qui aille chercher l'info). Comme cela, si l'appli est lancée sans interface, la fonction se déroulera sans problème

    Pourrais tu m'en dire plus sur le listener et l'EDT ?

    Merci.

  4. #4
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Sylver---
    Le problème est que je ne veux pas que ce soit la fonction de traitement qui mette à jour l'affichage de la frame car la méthode doit pouvoir fonctionner sans interface graphique. Je voulais donc faire "l'inverse" (que ce soit la frame qui aille chercher l'info). Comme cela, si l'appli est lancée sans interface, la fonction se déroulera sans problème

    Pourrais tu m'en dire plus sur le listener et l'EDT ?

    Merci.
    Il faut pouvoir "écouter" ton modèle (ta classe qui contient ta méthode):
    http://rom.developpez.com/java-listeners

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 104
    Par défaut
    Mauvaise approche
    Lorsque l'on ne connait pas du tout le design pattern Observer, une idée qui peut venir à l'esprit est de lancer un thread qui vérifie toutes les x millisecondes que la variable écoutée n'a pas été modifiée. Cette méthode est vraiment mauvaise, car d'une part elle consomme en ressources (attente active) [...]


    Merci, cela correspond parfaitement à ce que je veux faire

  6. #6
    Membre confirmé
    Inscrit en
    Septembre 2006
    Messages
    104
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 104
    Par défaut
    C'est bon, je l'ai mis en place et tout marche parfaitement
    Merci !!

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

Discussions similaires

  1. Problème de Thread gérant une JFrame
    Par pontus21 dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 24/05/2008, 19h18
  2. [VB.NET] Problème de Thread
    Par Sadneth dans le forum ASP.NET
    Réponses: 26
    Dernier message: 31/01/2006, 11h12
  3. Problème synchronisation threads
    Par Linio dans le forum Concurrence et multi-thread
    Réponses: 19
    Dernier message: 11/01/2006, 17h57
  4. [MFC] Problème de Threads + Timers
    Par Invité dans le forum MFC
    Réponses: 8
    Dernier message: 30/11/2005, 11h51
  5. [VC++6][DX9] Problème de thread lors d'un blit ...
    Par grandjouff dans le forum DirectX
    Réponses: 2
    Dernier message: 12/06/2003, 23h22

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