Rumah >pangkalan data >tutorial mysql >Bagaimana Mengendalikan Threading dengan Betul dalam Aplikasi JavaFX?

Bagaimana Mengendalikan Threading dengan Betul dalam Aplikasi JavaFX?

Linda Hamilton
Linda Hamiltonasal
2024-12-20 19:19:19204semak imbas

How to Handle Threading Correctly in JavaFX Applications?

Memahami Threading dalam JavaFX

JavaFX mengenakan dua peraturan penting untuk threading:

Peraturan 1 (GUI Threading ):
Sebarang interaksi dengan nod dalam graf pemandangan JavaFX mesti berlaku pada utas aplikasi JavaFX. Urutan ini bertanggungjawab untuk kedua-dua pemaparan dan pengendalian acara pengguna.

Peraturan 2 (Belitan Latar Belakang):
Operasi yang berjalan lama harus dilaksanakan pada urutan latar belakang untuk mengelakkan UI tidak bertindak balas.

Threading dengan javafx.concurrent API

JavaFX menyediakan kelas Task untuk mengurus operasi latar belakang. Tasks mempunyai kaedah call() yang dilaksanakan pada urutan yang berasingan. Setelah selesai, tugasan boleh mengemas kini elemen UI menggunakan pengendali acara berjaya() dan gagal() mereka. Pengendali ini digunakan pada FX Application Thread, memastikan pematuhan dengan Peraturan 1.

Contoh: Akses Pangkalan Data dengan Threading

Mari kita ambil contoh pertanyaan pangkalan data anda dan laksanakan ia menggunakan benang.

Objek Akses Data (DAO) Kelas:

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

Kelas Pengawal:

@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);
}

Dalam contoh ini, pertanyaan pangkalan data dijalankan pada urutan berasingan, mematuhi Peraturan 2. Selepas selesai, UI dikemas kini pada Benang Aplikasi FX, mematuhi Peraturan 1.

Atas ialah kandungan terperinci Bagaimana Mengendalikan Threading dengan Betul dalam Aplikasi JavaFX?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn