Partage
  • Partager sur Facebook
  • Partager sur Twitter

[JavaFx] Le corps bloc la vue (Thread, automate)

Sujet résolu
    21 octobre 2016 à 17:34:08

    Bonjour à tous,
    Je fais face à un problème dans le développement d'un projet.
    Mise en contexte : je travaille sur un projet universitaire, nous sommes en équipe. Le projet consiste en la réalisation d'un jeu de cartes (Black-Jack plus précisément), certaines classes doivent être conçus de sorte à pouvoir être réutiliser dans d'autres jeux de cartes. L'application est réalisé avec le patron MVC.
    Nous avons défini deux types de joueurs (qui spécialise la même classe abstraite) :

    • humain
    • Robot

    Chacune de ses deux classes définit une méthode play permettant comme son nom l'indique de jouer.
    Le jeu en lui-même (jouer une partie), est géré par l'intermédiaire d'un automate (utilisant le patron état).
    Un joueur ayant la possibilité de faire plusieurs actions, nous avons utilisé le patron stratégies (utiliser dans play par le robot. Pour les humains, ce seront des appels dans l'IHM avec des boutons).
    Le problème : le problème se situe dans l'affichage de l'IHM, toute la partie graphique et réalisée avec JavaFx. Nous avons une fenêtre affichant le menu principal, lorsque l'utilisateur clique sur le bouton « jouer », une boîte de dialogue s'ouvre permettant à l'utilisateur de paramétrer la partie (nombre de joueurs, nombre de jeux de cartes). Hors lorsqu'il clique sur le bouton pour valider, les jeux se jouent entièrement et l'affichage du jeu (qui est fait à la place du menu principal) s'affiche à la toute fin (lorsque le jeu est terminé).
    Nous avons donc pensé à utiliser un système de thread. mais là encore il y a un problème… Lorsque le jeu s'initialise, il est dans l'incapacité du maître à jour la vue. Le corps (qui est exécuté dans un thread) s'exécute mais affiche des erreurs dans le terminal, du fait que nous avons des propriétés Observables qui ne peuvent pas être mises à jour dans le thread.
    Ma question est donc comment puis-je mettre à jour la vue (et les propriétés observable) sans que le corps ne bloque cette dernière ?
    Je ne mets pas le code, car ce serait indigeste de mettre plus de 1000 lignes de code réparties en plusieurs classes de packages et modules différents. Je peux éventuellement mettre quelque partie sur la demande.
    Cordialement,
    Yoratheon

    • Partager sur Facebook
    • Partager sur Twitter
    Ensemble créons l'avenir !
      25 octobre 2016 à 9:24:38

      J'ai finalement trouver une solution, en ajoutant un runLater et en modifiant quelque instructions dans l'automate.

      Voici une solution qui m'a été donnée (sur un autre forum) qui pourrais en aider d'autre :

      Platform.runLater(() -> {
          // Forwarder tout ce qui a change dans le thread du jeu vers le JavaFX Application Thread pour mettre a jour l'UI.
          [...]
      });
      
      • Partager sur Facebook
      • Partager sur Twitter
      Ensemble créons l'avenir !

      [JavaFx] Le corps bloc la vue (Thread, automate)

      × 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