JAVAFX Concurrent Framework Part-3

Üç parçalı yazımızın son bölümünde Task<V> nesnemizi oluşturduk  , property leri düzenledik ve gerekli metodları override ettik ve Task<V> nesnemizden gelecek sonucu ayarladık. Şimdi Task<V> ile ilgili bir başka konu olan ; Task nesnesinin özelliklerini güncelleme konusu ile devam edelim. Bir önceki bölümdeki son kod bölümünde bunu gördük biraz açıklık getirelim. 

1.6 Task Property’lerini Güncelleme

Bir Task<V> çalışırken sürekli olarak içerisinde güncellenmesi gereken özellikler olacaktır. Bu özellikler güncellenmelidir ve JavaFX Application Thread üzerinden okunmalıdır. Task ile ilgili güncellemesi gereken değerlerle ilgili özel metodlar vardır. Bunlar ;

 – protected void updateMessage(String message)
 – protected void updateProgress(double workDone, double totalWork)
 – protected void updateProgress(long workDone, long totalWork)
 – protected void updateTitle(String title)
 – protected void updateValue(V value)

workDone ve totalWork değerlerini update ettiğimizde workDone/totalWork şeklinde bir oran bu property ‘e değer olarak atanır.  Eğer workDone totalWork’den büyük yada -1 olursa runtime exception hatası alırız. 

Bazen kısmı sonuç döndürmek istediğimiz durumlar olabilir. Peki bu ne demek mi diyorsunuz ? yani şöyle düşünün bizim uygulamamız 1 ile 100 arası asal sayıları buluyor değil mi? ilk 10 tane içinden buldu ve hala devam ediyor bulmaya , bu arada bulunan sonuçlar kısmı sonuçlardır ve bunlarında anlık gösterilmesi istenebilir. İlla hepsi bulunduktan sonra gösterilecek diye bir kaide yok değil mi 🙂 . İşte böyle kısmı sonuç gönderme durumu varsa göndereceğimiz sonucu bizim projemizde olduğu gibi final olarak tanımlamalıyız. Yani call() metodumuz final türünde bir sonuç döndürmeli. 

Bütün updateXXX metodlar JavaFX Application Thread üzerinde çalışır ve güvenle kullanılabilir. Call metodu üzerinde doğrudan güncelleme yapacaksanız Platform.runLater() metodunu kullanmalısınız. 

1.7 Task Eventlerini yakalama

Aşağıdaki event’leri set ederek bu durumlarda yapılacakları belirleyebilirsiniz. 

onCancelled
• onFailed
• onRunning
• onScheduled
• onSucceeded

1.8 Task ‘ı iptal etme

İki tane iptal etme metodumuz var bunlar;

• public final boolean cancel()
• public boolean cancel(boolean mayInterruptIfRunning)

Birinci versiyonda (cancel()) Task kuyruktan çıkarılır ve işlem durdurulur. İkinci versiyonda ise görevi çalıştıran iş parçacığının kesilip kesilmeyeceği belirtilir.  Burada şu detayı atlamayalım call() metodunun InterruptedException hatasını yakaladığından emin olmalısınız. 

Aşağıda Task<V> nesnemiz farklı durumlara geldiğinde olacak olayları tanımlayan metodlar var. Bu metodların içleri boştur siz işleminiz bu durumlara geldiğinde neler olacağını bunların içine yazabilirsiniz. Örneğin işleminiz herhangi bir nedenle iptal edildiğinde failed() metodu içine “İşlem iptal edildi” diye bir mesaj yazdırılabilir. Metodlara bakalım; 

• protected void scheduled()
• protected void running()
• protected void succeeded()
• protected void cancelled()
• protected void failed()

1.9 Task’ı Çalıştırma

Normal bir thread ile yada ExecutorService ile thread’i çalıştırabilirsiniz.

Yukarıdaki kodda setDaemon(true) diye bir kod var bu kod şunun için var . Normalde JVM bir thread çalışmaya başlayınca onun bitmesine kadar tabiri caiz ise bitmesini bekler . Eğer bu true yapılırsa JVM onun başını beklemez o arkaplanda çalışır .

Şimdi isterseniz arayüzü tasarlayalım ve konuyu kapatalım. FxCurrentExample.java diye bir class tanımlayalım ve bunu Application class’ından extend edelim. buyrun örneğimize devam ediyoruz. 

FxCurrentExample.java

Artık uygulamamızı yaptığımıza göre çalıştırabiliriz.  Herkese kolay gelsin diyorum . İnşaallah güzel bir anlatım olmuştur. 

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir