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

 Java Discussion :

interface se freeze..


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Par défaut interface se freeze..
    Bonsoir à tous,

    Je suis nouveau sur ce forum et je lui souhaite avant tout longue vie car ses tutos sont extra!!
    J'ai une question qui me tracasse: j'ai une interface Swing dans laquelle j'ai un bouton play et pause. J'ai aussi une variable statique qui définit un état de 'ON' ET 'OFF'. (Le programme principal génère l'interface.)
    En appuyant sur play je met ma variable à 'ON' et entre ensuite dans une boucle de traitement. Cette boucle (qui effectue un traitement assez couteux) 'reboucle' indéfiniment, tant que la valeur de la variable est à 'ON'.
    Le bouton pause est censé modifier cette variable à OFF et donc arreter le bouclage.
    Le probleme c'est qu'une fois sur 'ON' l'interface se 'freeze' pour entrer dans la boucle et ne plus en sortir: impossible d'appuyer sur pause!

    Je précise quand même que c'est un thread qui lance quand j'appuie sur play. Mais il faut croire que le CPU ne s'interesse qu'à ce thread et plus à celui qui gère l'interface, ce qui est fort facheux... On m'a parlé d'EDT et de de SwingWorker mais sans plus.
    S'il existe une facon simple de procéder je suis preneur....

    Merci de votre aide!!!

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    on peux voir le code de démarrage de ton thread?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Par défaut
    merci tchiz pour ta réponse si rapide.
    ca donne ca: Dans le programme principal j'écris:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SimulationThread   simulationThread  = new SimulationThread();
    //où SimulationThread etends la classe Thread.

    ensuite je fais un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    simulationThread.start();
    //ma méthode run() initialise les données du futur traitement.

    Après avoir appuyé sur play j'entre dans le traitement de thread. A la fin du traitement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    if(simulationRunning == SimulationState.ON)
         {
          try
          {
           Thread.sleep(1500); //pour visualiser les changements que le traitement //a fait sur l'interface.
          }
          catch (InterruptedException e)
          {
           e.printStackTrace();
          }
          history.next(); //étape de traitement suivante
     
          update(SimulationState.ON); //je retourne dans la boucle avec un 'feu vert'
    Merci!

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Il faudrait voir le code associé à ton bouton start.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 119

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 7
    Par défaut
    Désolé pour le retard et merci tchize et gulain pour vos réponses je me suis finalement bien débrouillé avec les SwingWorker.
    C'est épatant ce qu'on peut faire avec...
    Pour ceux que ca interesse cette doc est très bien rédigée (en anglais of course...) ICI

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

Discussions similaires

  1. interface SWT se freeze ?!
    Par blackbird1 dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 05/03/2012, 13h41
  2. Interface freezée dès la création
    Par subzero01 dans le forum MFC
    Réponses: 0
    Dernier message: 23/07/2009, 13h15
  3. wx.App.Yield() et freeze de mon interface
    Par Alamassepointcom dans le forum wxPython
    Réponses: 1
    Dernier message: 22/03/2009, 21h23
  4. Freeze interface, enregistrement dans BD
    Par SebastianPx dans le forum EDT/SwingWorker
    Réponses: 2
    Dernier message: 17/02/2009, 13h01
  5. Réponses: 11
    Dernier message: 24/11/2006, 22h30

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