Rumah > Java > javaTutorial > Bagaimana untuk Mengelakkan `IllegalStateException` Apabila Menggunakan Thread untuk Permintaan Pangkalan Data dalam JavaFX?

Bagaimana untuk Mengelakkan `IllegalStateException` Apabila Menggunakan Thread untuk Permintaan Pangkalan Data dalam JavaFX?

Mary-Kate Olsen
Lepaskan: 2024-12-24 19:34:11
asal
896 orang telah melayarinya

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

Menggunakan Thread untuk Melaksanakan Permintaan Pangkalan Data

Dalam JavaFX, adalah penting untuk mematuhi peraturan threading khusus untuk memastikan responsif dan konsistensi UI. Ini melibatkan pelaksanaan tugas yang sudah lama berjalan, seperti permintaan pangkalan data, pada urutan latar belakang dan mengemas kini UI pada urutan aplikasi JavaFX.

Peraturan Threading:

  1. Peraturan 1: Sebarang kod yang berinteraksi dengan keadaan graf tempat kejadian mesti dilaksanakan pada Urutan aplikasi JavaFX.
  2. Peraturan 2: Operasi jangka panjang harus dilaksanakan pada urutan latar belakang.

Isu PengecualianNegeri Tidak Sah:

IllegalStateException yang anda temui adalah kerana anda cuba mengemas kini label courseCodeLbl daripada urutan latar belakang, melanggar Peraturan 1.

Pelaksanaan Betul:

Untuk melaksanakan penjalinan dengan betul, ikut langkah berikut:

  1. Cipta pelaksanaan Runnable untuk merangkum permintaan pangkalan data.
  2. Gunakan Kaedah Platform.runLater() untuk menjadualkan kemas kini UI untuk urutan aplikasi JavaFX.

Menggunakan API javafx.concurrent:

JavaFX menyediakan API javafx.concurrent untuk memudahkan pengaturcaraan serentak dan pengurusan UI. Kelas Tugas adalah pusat kepada API ini, menyediakan mekanisme untuk pemprosesan latar belakang dan mengemas kini UI.

Kod Contoh:

Berikut ialah contoh kelas Pengawal yang menunjukkan yang betul penggunaan threading dan kelas Tugas:

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();
    }
}
Salin selepas log masuk

Kod ini merangkumi permintaan pangkalan data dalam Tugasan, yang mengendalikan menjalankan pertanyaan dan mengemas kini UI pada utas aplikasi JavaFX. Dengan mematuhi peraturan penjalinan JavaFX dan menggunakan API, anda boleh melaksanakan permintaan pangkalan data dengan cekap sambil mengekalkan responsif UI.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan `IllegalStateException` Apabila Menggunakan Thread untuk Permintaan Pangkalan Data dalam JavaFX?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan