Rumah >Java >javaTutorial >Bagaimana untuk Melaksanakan Threading dengan Betul untuk Permintaan Pangkalan Data dalam JavaFX untuk Mengelakkan Penyekatan UI?

Bagaimana untuk Melaksanakan Threading dengan Betul untuk Permintaan Pangkalan Data dalam JavaFX untuk Mengelakkan Penyekatan UI?

Susan Sarandon
Susan Sarandonasal
2024-12-26 10:20:12521semak imbas

How to Properly Implement Threading for Database Requests in JavaFX to Avoid UI Blocking?

Melaksanakan Threading untuk Permintaan Pangkalan Data

Anda menghadapi pengecualian kerana mengakses UI JavaFX daripada urutan yang berasingan. Begini cara anda boleh melaksanakan penjalinan dengan betul:

Prinsip Am Pembelongan dalam JavaFX

  • Peraturan 1: Sebarang pengubahsuaian atau akses kepada graf pemandangan mesti dilakukan pada Benang Aplikasi FX.
  • Peraturan 2: Operasi jangka panjang harus dilaksanakan pada Benang Aplikasi bukan FX.

Pelaksanaan Menggunakan Benang

Buat urutan dan mulakan permintaan pangkalan data padanya:

Thread t = new Thread(new Runnable() {
    public void run() {
        requestCourseName();
    }
}, "Thread A");

t.start();

Menggunakan JavaFX Concurrent API

The javafx.concurrent API menyediakan cara yang mudah untuk mengurus urutan latar belakang dan mengemas kini UI.

  • Tugas: Merangkumkan operasi latar belakang.
  • Tugas Latar Belakang Thread: Melaksanakan kaedah panggilan() Task pada latar belakang benang.
  • Benang Aplikasi FX: Mengemas kini UI apabila selesai melalui pengendali acara yang didaftarkan ke Tugas.

Contoh Menggunakan WidgetDAO dan Tugasan

// DAO encapsulates database access
public class WidgetDAO {
    public List<Widget> getWidgetsByType(String type) { ... }
}

// Controller handles UI operations
public class MyController {
    private WidgetDAO widgetAccessor;
    private Executor exec;

    public void searchWidgets() {
        String searchString = widgetTypeSearchField.getText();
        Task<List<Widget>> widgetSearchTask = new Task<>() {
            @Override
            protected List<Widget> call() throws Exception {
                return widgetAccessor.getWidgetsByType(searchString);
            }
        };

        widgetSearchTask.setOnSucceeded(e -> widgetTable.getItems().setAll(widgetSearchTask.getValue()));
        exec.execute(widgetSearchTask);
    }
}

Contoh Menggunakan MyDAO dan Tugas

// DAO encapsulates database access
public class MyDAO {
    public Course getCourseByCode(int code) { ... }
}

// Controller handles UI operations
public class MyController {
    private MyDAO myDAO;
    private Executor exec;

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

        courseTask.setOnSucceeded(e -> {
            Course course = courseTask.getValue();
            courseCodeLbl.setText(course.getName());
        });
        exec.execute(courseTask);
    }
}

Dengan melaksanakan threading dengan betul, anda memastikan bahawa permintaan pangkalan data yang berjalan lama tidak menyekat urutan UI, menghasilkan antara muka pengguna yang responsif.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Threading dengan Betul untuk Permintaan Pangkalan Data dalam JavaFX untuk Mengelakkan Penyekatan UI?. 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