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
Lepaskan: 2024-12-26 10:20:12
asal
525 orang telah melayarinya

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

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

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

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!

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