L'exécution d'opérations lourdes telles que des requêtes de base de données dans le thread principal peut geler l'interface graphique. Le multithreading vous permet d'effectuer de telles opérations de manière asynchrone. Explorons comment l'utiliser dans JavaFX avec les classes Thread et Runnable.
Dans votre code, vous rencontrez une IllegalStateException lorsque vous tentez de mettre à jour l'interface utilisateur courseCodeLbl. élément à partir d’un fil d’arrière-plan créé à l’aide de Thread. Cela viole une règle clé de JavaFX : les modifications apportées aux nœuds du graphe de scène doivent être effectuées sur le thread de l'application JavaFX.
1. Utilisation des classes Thread et Runnable :
Vous pouvez exécuter une tâche dans un thread séparé en implémentant l'interface Runnable. La méthode run de l'objet Runnable contient le code à exécuter.
Thread t = new Thread(new Runnable() { @Override public void run() { // Perform database request here } });
2. Invocation de différentes méthodes dans run :
Vous pouvez appeler différentes méthodes dans la méthode run en créant une instance d'une classe et en appelant ses méthodes.
MyClass myClass = new MyClass(); Thread t = new Thread(new Runnable() { @Override public void run() { myClass.method1(); myClass.method2(); } });
JavaFX fournit l'API javafx.concurrent pour le multithreading spécialement conçue pour travailler avec des applications d'interface utilisateur. Il propose :
- Classe de tâches :
Représente une tâche en arrière-plan à usage unique qui peut renvoyer un résultat ou lancer des exceptions.
- Rappels :
Méthodes pratiques comme setOnSucceeded et setOnFailed qui appellent automatiquement des gestionnaires sur l'application FX Sujet.
Utilisation de l'API de concurrence JavaFX :
Task<Course> task = new Task<>() { @Override public Course call() { return myDAO.getCourseByCode(courseId); } }; task.setOnSucceeded(e -> { Course course = task.getValue(); courseCodeLbl.setText(course.getName()); }); exec.execute(task);
En tirant parti du threading, vous pouvez effectuer des requêtes de base de données de manière asynchrone, en gardant l'interface utilisateur JavaFX réactive. N'oubliez pas de respecter les règles JavaFX pour éviter les exceptions et garantir le bon fonctionnement.
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!