Maison > base de données > tutoriel mysql > Comment gérer correctement le threading dans les applications JavaFX ?

Comment gérer correctement le threading dans les applications JavaFX ?

Linda Hamilton
Libérer: 2024-12-20 19:19:19
original
263 Les gens l'ont consulté

How to Handle Threading Correctly in JavaFX Applications?

Comprendre le threading dans JavaFX

JavaFX impose deux règles essentielles pour le threading :

Règle 1 (GUI Threading ):
Toute interaction avec un nœud dans un graphe de scène JavaFX doit avoir lieu sur JavaFX fil de candidature. Ce fil est responsable à la fois du rendu et de la gestion des événements utilisateur.

Règle 2 (threading en arrière-plan) :
Les opérations de longue durée doivent être exécutées sur un thread en arrière-plan pour éviter que l'interface utilisateur ne réponde.

Threading avec l'API javafx.concurrent

JavaFX fournit une classe Task pour gérer les opérations en arrière-plan. Les tâches ont une méthode call() qui s'exécute sur un thread séparé. Une fois terminées, les tâches peuvent mettre à jour les éléments de l'interface utilisateur à l'aide de leurs gestionnaires d'événements succeeded() et failed(). Ces gestionnaires sont invoqués sur le fil d'application FX, garantissant le respect de la règle 1.

Exemple : accès à la base de données avec thread

Prenons votre exemple de requête de base de données et implémentons en utilisant le threading.

Objet d'accès aux données (DAO) Classe :

public class CourseDAO {

    private Connection conn;

    public CourseDAO() throws Exception {
        // Establish database connection
    }

    public Course getCourseByCode(int code) throws SQLException {
        try (PreparedStatement stmt = conn.prepareStatement("SELECT * FROM course WHERE c_code = ?")) {
            stmt.setInt(1, code);
            ResultSet rs = stmt.executeQuery();
            if (rs.next()) {
                // Create and populate a Course object
            } else {
                // Handle case where course doesn't exist
            }
        }
    }
}
Copier après la connexion

Classe du contrôleur :

@FXML
private TextField courseId;
@FXML
private Label courseCodeLbl;

private CourseDAO courseDAO;

@FXML
public void getCourseOnClick() {
    final int courseCode = Integer.valueOf(courseId.getText());
    Task<Course> courseTask = new Task<>() {
        @Override
        protected Course call() throws Exception {
            return courseDAO.getCourseByCode(courseCode);
        }
    };

    courseTask.setOnSucceeded(e -> {
        Course course = courseTask.getValue();
        if (course != null) {
            courseCodeLbl.setText(course.getName());
        }
    });

    // Execute the task on a background thread
    exec.execute(courseTask);
}
Copier après la connexion

Dans cet exemple, la requête de base de données s'exécute sur un thread distinct, conformément à la règle 2. Une fois terminé, l'interface utilisateur est mise à jour sur le fil d'application FX, conformément à la règle 1.

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 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