JavaFX Platform.runLater() nedir ? Nasıl kullanılır ?

Merhaba arkadaşlar yine güzel bir konuyu anlatmak üzere bir sayfa açmış bulunmaktayım. Bilindiği gibi çok uzun zaman alan işlemleri JavaFX main thread’de çalıştırmak uygun bir durum değil ? sebebi ise bildiğiniz gibi çok uzun süren bir işlem arayüzü kilitleyecek ve kullanıcının program bozuk deyip kapatmasına yani kullanamamasına sebep olacaktır. Tabi bu hiç de istediğimiz bir durum değildir. Peki ne yapalım. ? Eğer bir işlem uzun sürüyorsa bunu arka planda çalıştıralım ta ki programımız kilitlenmiş havasına girip kapatılmaya sebep olmasın. Javafx Concurrent Framwork konusu aslında bu konuyu başdan aşağı işlemiş. Orada demiştik eğer böyle bir işiniz varsa ve arka planda yeni bir Thread  nesnesi oluşturun bu nesne sizin için arkaplanda işlemleri yapar demiştik. Pekiiii? Şimdi bir thread oluşturdum ama benim oluşturduğum thread bir background thread, ben işlemleri yaptım ama birde “UI Thread” (Javafx Application Thread) deki bir label’e işlemlerim ile ilgili bilgi yazdırmak istiyorum. Yani bir background thread’den UI thread’e veri aktarmak istiyorum. Bunun için  Task<> nesnesini oluşturulabilir ancak biraz uzun olabilir. yani yeni sınf aç , …..,  property leri hazırlamak updateler vb. . İşte bu durumlarda pratik kullanım açısından kullanılabilecek yapı Platform.runLater(Runnable runnable) dir. Yani Task<> ‘ın pratik kullanımı yada daha küçük işlemlerde ( komplex olmayan) kullanılan versiyonu diyebiliriz.  Bu şekilde de UI thread’e bilgi aktarabiliriz. 

Adımlar yazacak olursak

  • Öncelikle uzun bir işleminiz varsa yeni bir thread oluşturun ve işleminizi arka plana taşıyın 
  • UI thread ‘de bulunan bir elemana erişecek ve ona bilgi gönderecekseniz 
  • Platform.runLater(new Runnable(){  public void run(){ ana threaddeki elamana burdan bilgi aktarın. }});
  • oluşturduğunuz thread’i çalıştırın . 

Şimdi task ve Platform.runLater() kullanım farklarını gösterir bir kod paylaşalım.

Evet iksininde kullanımı ile ilgili örnekler karşımızda . Dediğim gibi daha komplex işlerde Task<> tercih edilir. Daha küçük işlerde Platform.runLater() kullanılır. Platform.runLater(); de aynen Task gibi  Javafx main  Thread’ e ulaşıp bilgi gönderebilir.

Şimdi başka bir örnek kulanım daha paylaşalım.

örnek: 3

yine başka bir örnek daha 

örnek 4:

Örnek 5 progressbar kullanarak. buraya şu notu düşelim progressbar 0-1 aralığında değerler alarak progress’e yansıtır ona göre değerleri ayarlamak lazım. 

 

 

konuyu yeterince aydınlatacak örnekler olmuştur inşallah.

Bir cevap yazın

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