Maison >base de données >tutoriel mysql >Comment mettre à jour en toute sécurité l'interface utilisateur JavaFX à partir des threads de base de données en arrière-plan ?

Comment mettre à jour en toute sécurité l'interface utilisateur JavaFX à partir des threads de base de données en arrière-plan ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-26 19:29:09783parcourir

How to Safely Update JavaFX UI from Background Database Threads?

Utiliser des threads pour effectuer des requêtes de base de données avec JavaFX

JavaFX dicte deux règles fondamentales concernant les threads :

  1. Tout l'interaction avec l'état d'un nœud de graphe de scène doit être exécutée sur le thread d'application JavaFX.
  2. Longueur les opérations doivent être exécutées sur un thread d'arrière-plan.

Exception rencontrée

L'exception que vous avez rencontrée provient d'une tentative de mise à jour de l'interface utilisateur (courseCodeLbl.setText(.. .)) à partir d'un thread autre que le thread de l'application JavaFX.

Implémentation du Threading Correctement

Pour garantir que les requêtes de base de données sont exécutées dans un thread séparé, suivez ces étapes :

  • Créez une classe Runnable et implémentez la méthode run() qui contient la requête de base de données .
  • Passez une instance de cette classe au constructeur Thread et démarrez le thread.
  • Utilisez Platform.runLater (Runnable r) pour mettre à jour l'interface utilisateur avec les résultats de la base de données.

Implémentation du threading à l'aide de JavaFX.concurrent

JavaFX fournit la classe Task spécialement conçue pour gérer les threads d'arrière-plan et mettre à jour l'interface utilisateur.

  • Créez un objet Task et définissez l'appel de la base de données dans la méthode call().
  • Utilisez updateProgress(...) et updateMessage(...) pour mettre à jour l'interface utilisateur pendant l'exécution.
  • Enregistrez setOnSucceeded(...) et setOnFailed( ...) pour traiter les résultats et gérer les erreurs.
  • Invoquez la tâche à l'aide d'un Task.Executor (par exemple, Executors.newCachedThreadPool).

Exemple d'implémentation

Task<Course> courseTask = new Task<Course>() {
    @Override
    public Course call() throws Exception {
        return myDAO.getCourseByCode(courseCode);
    }
};
courseTask.setOnSucceeded(e -> {
    Course course = courseTask.getCourse();
    if (course != null) {
        courseCodeLbl.setText(course.getName());
    }
});
exec.execute(courseTask);

Dans cet exemple, l'accès à la base de données est effectué dans une tâche et la mise à jour de l'interface utilisateur est planifiée. sur le thread d'application JavaFX à l'aide du gestionnaire setOnSucceeded. En suivant ces directives, vous pouvez utiliser efficacement les threads pour optimiser les requêtes de base de données tout en conservant la réactivité de l'interface utilisateur dans les applications JavaFX.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn