Utilisation de la classe est également multithreading Timer
(java.util.Timer
). Cela semble potentiellement adapté à une application comme celle-ci, bien que le multithreading puisse introduire un nombre important de pièges possibles. Vous pouvez créer un Timer
puis planifier un TimerTask
au début d'une question qui marquera un indicateur pour indiquer que la question est incorrecte et désactiver l'acceptation de tentatives de réponse futures (ou passer à la question suivante ou à toute autre action appropriée) lorsque la tâche planifiée se produit. Cela nécessiterait de créer une sous-classe de TimerTask
qui implémente la méthode abstraite run()
pour effectuer l'action que vous voulez (marquer la question incorrecte, etc.). Vous pourriez même vouloir utiliser la minuterie pour d'autres tâches (par exemple donner à l'utilisateur un moment pour traiter le fait qu'il a expiré sur une question avant de passer à la suivante).
Le flux de base à l'aide d'un Timer
(comme il est indiqué dans l'exemple ci-dessus) est de créer une sous-classe de TimerTask
mise en œuvre run()
pour effectuer toutes les tâches doivent se produire à un moment donné ou à la fin d'une certaine durée de temps (ou de façon répétée à un certain intervalle, que Timer
s supportent également). Instancier ensuite un Timer
et planifier une instance de cette sous-classe TimerTask
pour exécution à un moment donné ou après un certain intervalle (en fonction de la méthode schedule
de Timer
que vous appelez pour la planifier). Ensuite, une fois cette durée atteinte ou l'intervalle écoulé, la méthode run()
que vous avez implémentée sera appelée dans le fil d'arrière-plan Timer
. Cependant, vous devrez vous méfier des pièges tels que les conditions de course (par exemple, si votre tâche devait marquer la question comme incorrecte, puis désactiver les réponses, si l'utilisateur répondait). une question entre votre tâche la marquant incorrecte et la désactivant en répondant à ce que vous pourriez obtenir un comportement inattendu). C'est l'un des défis communs de l'écriture de code multithread. Si la logique et le flux de votre programme sont assez simples, une conception attentive des actions effectuées par la tâche quand et dans quel ordre peut suffire à éviter ces problèmes, mais vous devez faire preuve de la plus grande prudence en traitant les mises à jour d'état (comme la mise à jour d'un booléen indiquant que la question était ou n'était pas correcte à partir d'une tâche de minuteur).
Un multithreading plus général serait certainement utilisable, bien que Timer
semble utile dans la mesure où il est plus spécifique à ce type particulier de tâche. En dehors de tout cela, je vous déconseille fortement d'écrire une méthode complète pour chaque question, du point de vue stylistique, car cela peut conduire à une grande quantité de code dupliqué ou très similaire. Une approche comme la création d'une classe pour les questions (surtout si toutes vos questions ont un format similaire) peut être préférable, vous permettant de créer une nouvelle question en appelant simplement un constructeur avec le texte de la question et l'index du bon répondre. Votre classe de questions peut inclure une méthode qui effectue la vérification de réponse dans votre exemple de code que toutes les questions (en tant qu'instances de classe) ont sans avoir besoin de le réécrire pour chacun d'eux.