Utiliser des threads pour exécuter des requêtes de base de données
Dans JavaFX, il est crucial de suivre des règles de thread spécifiques pour garantir la réactivité et la cohérence de l'interface utilisateur. Cela implique l'exécution de tâches de longue durée, telles que des requêtes de base de données, sur les threads d'arrière-plan et la mise à jour de l'interface utilisateur sur le thread d'application JavaFX.
Règles de thread :
Problème IllegalStateException :
L'exception IllegalStateException que vous avez rencontrée est due au fait que vous essayez de mettre à jour l'étiquette courseCodeLbl à partir d'un fil d'arrière-plan, en violation Règle 1.
Implémentation correcte :
Pour implémenter correctement le threading, suivez ces étapes :
Utilisation de l'API javafx.concurrent :
JavaFX fournit l'API javafx.concurrent pour simplifier la programmation simultanée et la gestion de l'interface utilisateur. La classe Task est au cœur de cette API, fournissant un mécanisme de traitement en arrière-plan et de mise à jour de l'interface utilisateur.
Exemple de code :
Voici un exemple de classe Controller qui démontre le bon utilisation du threading et de la classe Task :
import javafx.concurrent.Task; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.control.TextField; public class Controller { @FXML private Button getCourseBtn; @FXML private TextField courseId; @FXML private Label courseCodeLbl; private ModelController mController; public void getCourseNameOnClick() { Task<String> courseTask = new Task<>() { @Override protected String call() { String courseName = ""; Course c = new Course(); c.setCCode(Integer.valueOf(courseId.getText())); mController = new ModelController(c); try { ResultSet rs = mController.getResult(); if (rs.next()) { courseName = rs.getString(1); } } catch (Exception e) { throw new RuntimeException(e); } return courseName; } }; courseTask.setOnSucceeded(e -> Platform.runLater(() -> courseCodeLbl.setText(courseTask.getValue()))); new Thread(courseTask).start(); } }
Ce code encapsule la requête de base de données dans une tâche, qui gère l'exécution de la requête et la mise à jour l'interface utilisateur sur le thread d'application JavaFX. En adhérant aux règles de thread JavaFX et en utilisant l'API, vous pouvez exécuter efficacement les requêtes de base de données tout en conservant la réactivité de l'interface utilisateur.
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!