Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de thread

Les threads fonctionnent mais pas les actions intermédiaires

    2 mai 2012 à 14:42:09

    Bonjour à tous. Je suis en train de créer une application du style de Motus en Java, et j'ai un souci avec les threads.

    Ma grille de mots est une matrice de [6][8] JTextField qui contiennent chacun une lettre.
    Lorsque j'écris un mot dans la grille et le valide, j'utilise la boucle suivante :

    for(int i = 0 ; i < 8 ; i++) // On affiche chaque lettre
    		{
                            // On espace chaque affichage de lettre de 2 dixièmes de seconde
    			try { Thread.sleep(200); } catch (InterruptedException e) {}
    
    			if(lettre au bon endroit)
    			{
    				grille[motActuel.getListe().size()][i].setBackground(Color.RED);
                            }
    			else
    			{
    				grille[motActuel.getListe().size()][i].setBackground(Color.ORANGE);
    			}
    		}
    


    Le souci est le suivant : les 8 coupures de temps fonctionnent bien, mais les changements d'affichage ne sont effectifs qu'à la fin de la boucle.
    • Partager sur Facebook
    • Partager sur Twitter
      2 mai 2012 à 16:14:56

      Salut,
      c'est surement parce-que la partie de code que tu nous montre se trouve dans une méthode actionPerformed() ou mouseClicked(). En fait ces méthodes sont traitées par un thread créé par la JVM appelé l'EDT, et c'est ce même thread qui gère la mise à jour de l'affichage. Or quand l'EDT est dans ta boucle il ne peut pas mettre l'affichage à jour en même temps, donc il ajoute le traitement sur la pile d'exécution. Il le mettra à jour seulement une fois sortit de ta boucle, quand il sera libre.

      Une solution peut être de lancer un nouveau thread quand tu valides, et de faire ta boucle dedans pour libérer l'EDT et permettre la mise à jour de l'affichage en temps voulu.
      • Partager sur Facebook
      • Partager sur Twitter
      ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.
        2 mai 2012 à 16:27:20

        Je pense avoir compris le souci mais j'ai absolument aucune idée de comment faire... à vrai dire j'ai pas mal de soucis pour comprendre les threads :/

        Et effectivement la méthode est appelée dans un KeyPressed
        • Partager sur Facebook
        • Partager sur Twitter
          2 mai 2012 à 16:35:47

          Dans le tuto Java de cysboy il y a une partie sur les Thread, tu devrais la (re)lire. En cherchant sur Google tu pourras trouver facilement des tutos en français dont pas mal sur developpez.com qui peuvent t'aider.
          Au début ça peut paraitre compliqué mais en fait ça ne l'est pas tant que ça et c'est vite indispensable dans une application, surtout si plus tard tu utilises le réseau (Sockets) dans tes apps.
          • Partager sur Facebook
          • Partager sur Twitter
          ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.
            2 mai 2012 à 18:54:22

            Citation : Minde


            Au début ça peut paraitre compliqué mais en fait ça ne l'est pas tant que ça



            Ouais tu dois pas parler de la même programmation concurrente que le reste du monde :p . La programmation concurrente fait partie des domaines les plus difficiles à maîtriser. Les bugs sont très difficiles à détecter et à corriger c'est souvent encore pire.


            • Partager sur Facebook
            • Partager sur Twitter
              2 mai 2012 à 19:08:08

              Je parlais de la compréhension globale de ce qu'est un thread, comment ça fonctionne et à quoi ça sert puisque c'est ce avec quoi il a apparemment du mal, pas des problèmes d'utilisation qu'on peut rencontrer avec.

              Ça dépend également du contexte, dans un petit programme comme le sien je doute qu'il rencontre beaucoup de problèmes, faut pas lui faire peur comme ça :lol:
              • Partager sur Facebook
              • Partager sur Twitter
              ⚙️ Une solution simple règle le problème ; une solution compliquée en crée un nouveau.
                2 mai 2012 à 22:39:21

                C'est quand même un projet un minimum considérable, puisque je compte créer le jeu du début à la fin, tirages de boules, grilles, mots etc.
                Et effectivement je pourrais sans souci finir ce programme sans threads, ils sont juste là pour un souci d'esthétique et d'interface, mais je tiens à embellir la chose.

                Merci encore pour vos conseils en tout cas :)
                • Partager sur Facebook
                • Partager sur Twitter

                Problème de thread

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown