Maison > Java > javaDidacticiel > Comment éviter « IllegalStateException » lors de l'utilisation de threads pour les requêtes de base de données dans JavaFX ?

Comment éviter « IllegalStateException » lors de l'utilisation de threads pour les requêtes de base de données dans JavaFX ?

Mary-Kate Olsen
Libérer: 2024-12-24 19:34:11
original
858 Les gens l'ont consulté

How to Avoid `IllegalStateException` When Using Threads for Database Requests in JavaFX?

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 :

  1. Règle 1 : Tout code interagissant avec l'état du graphe de scène doit être exécuté sur l'application JavaFX thread.
  2. Règle 2 : Les opérations de longue durée doivent être exécutées sur les threads d'arrière-plan.

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 :

  1. Créez une implémentation Runnable pour encapsuler la base de données request.
  2. Utilisez la méthode Platform.runLater() pour planifier les mises à jour de l'interface utilisateur pour l'application JavaFX. fil de discussion.

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();
    }
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal