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

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