Kullanın Platform.runLater(...)
hızlı ve basit işlemler için ve Task
karmaşık ve büyük operasyonlar için.
Örnek: Neden Platform.runLater(...)
uzun hesaplamalar için kullanamıyoruz (Aşağıdaki referanstan alınmıştır).
Sorun: 0'dan 1 milyona kadar sayılan ve UI'deki ilerleme çubuğunu güncelleyen arka plan iş parçacığı.
Kullanan kod 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();
Bu, korkunç bir kod parçası, doğaya karşı bir suç (ve genel olarak programlama). İlk olarak, sadece Runnables'ın bu çift yuvasına bakarak beyin hücrelerini kaybedeceksiniz. İkincisi, olay kuyruğunu küçük Runnable'larla batıracak - aslında bir milyon. Açıkçası, arka planda çalışanların yazılmasını kolaylaştırmak için bazı API'lere ihtiyacımız vardı ve ardından kullanıcı arayüzü ile geri iletişim kurduk.
Görevi Kullanan Kod:
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();
önceki kodda sergilenen kusurların hiçbirinden muzdarip değil
Referans:
JavaFX 2.0'da Çalışan İş Parçacığı Oluşturma