Rumah > Java > javaTutorial > JavaFX `Platform.runLater` lwn. `Task`: Bilakah Saya Perlu Menggunakan Yang Mana?

JavaFX `Platform.runLater` lwn. `Task`: Bilakah Saya Perlu Menggunakan Yang Mana?

DDD
Lepaskan: 2024-12-06 04:26:10
asal
543 orang telah melayarinya

JavaFX `Platform.runLater` vs. `Task`: When Should I Use Which?

Platform.runLater dan Task dalam JavaFX: Bila dan Cara Penggunaan

Dalam JavaFX, konsep Platform.runLater dan Task boleh mengelirukan untuk pemula. Mari kita jelaskan perbezaan mereka dan senario yang sesuai untuk penggunaannya.

Bila Menggunakan Tugasan:

Gunakan Tugasan untuk operasi yang rumit dan memakan masa yang perlu dilakukan dalam benang yang berasingan. Tugasan membenarkan penjejakan kemajuan, pelaksanaan tak segerak dan pengendalian acara semasa pelaksanaan tugasan.

Bila Menggunakan Platform.runLater:

Gunakan Platform.runLater untuk ringkas dan pantas operasi yang perlu dilaksanakan pada Benang Aplikasi JavaFX. Ini memastikan kemas kini GUI dilakukan dengan betul.

Peraturan Emas untuk Penggunaan:

Sebagai peraturan umum, gunakan Tugasan untuk operasi yang mengambil masa lebih daripada beberapa milisaat untuk diselesaikan , dan gunakan Platform.runLater untuk kemas kini GUI pantas.

Objek dan Threading:

Kedua-dua Task dan Platform.runLater beroperasi dengan membuat thread berasingan dalam thread utama. Walau bagaimanapun, mereka berbeza dalam cara mereka mengendalikan kemas kini GUI:

  • Tugas: Akan mengemas kini GUI secara automatik pada Benang Aplikasi JavaFX melalui kaedah kemas kiniProgress dan updateMessage.
  • Platform.runLater: Memerlukan pengendalian kemas kini GUI yang jelas dengan membungkus kod dalam Runnable yang kemudiannya dihantar ke Platform.runLater.

Contoh: Pengiraan Panjang dan Kemas Kini GUI

Pertimbangkan contoh berikut di mana kita perlu mengira dari 0 kepada 1 juta dan kemas kini bar kemajuan dalam GUI:

Menggunakan Platform.runLater:

final ProgressBar bar = new ProgressBar();
new Thread(new Runnable() {
    @Override public void run() {
        for (int i = 1; i <= 1000000; i++) {
            final int counter = i;
            Platform.runLater(new Runnable() {
                @Override public void run() {
                    bar.setProgress(counter / 1000000.0);
                }
            });
        }
    }
}).start();
Salin selepas log masuk

Kod ini akan menyebabkan banjir baris gilir acara yang berlebihan dan potensi masalah prestasi.

Menggunakan Tugas:

Task task = new Task<Void>() {
    @Override public Void call() {
        static final int max = 1000000;
        for (int i = 1; i <= max; i++) {
            updateProgress(i, max);
        }
        return null;
    }
};

ProgressBar bar = new ProgressBar();
bar.progressProperty().bind(task.progressProperty());
new Thread(task).start();
Salin selepas log masuk

Kod ini menggunakan Tugas untuk melakukan pengiraan dan mengemas kini GUI dengan cekap tanpa membanjiri baris gilir acara.

Atas ialah kandungan terperinci JavaFX `Platform.runLater` lwn. `Task`: Bilakah Saya Perlu Menggunakan Yang Mana?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan