• Çalışmalarım

  • Favori Linklerim

  • Önemli Yazılarım

  • Kategoriler

  • Hit Counter

    • 27,286 hits

Java SWT

SWT (Standard Widget Toolkit) Java için yazılmış GUI kütüphanesidir,ve belkide Java GUI kütüphanelerinden en iyisidir.SWT ile Javanın (Swing) en büyük sorunlarından biri olan yavaş çalışan GUI sorunu biraz da olsa çözümlenmiş oluyor.Java dünyasının meşhur Eclipse’si SWT ile yazılmıştır.

Java Swingt’te sadece 1 tane işletim sistemi nesnesi vardır o da gördüğümüz penceredir.İçindeki bütün nesneleri (buton,panel,label…) java kendi kodları ile bu pencereyi boyayarak gösterir,tabi bu gösterme işlemi içinde bir yapı kurulmuştur.Her görsel nesne (buton vs.) bir nesneden türerler ve ana nesnenin paint() metodunu ezerek paint içindeki kod ile pencerede bulundukları pozisyona keni lojikleri (basılı,aktif,pasif….) yardımıyla bir buton resimi çizerler.Her nesne aynı mantık ile işlem yaparlar.

Bu yapı ile her java nesnesi her yerde aynı görünür,fakat bu yapının dezavantajı vardır o da her nesne kendini Java kodu ile çizdirir yani göreceli yavaş olan bir dile ile çizdirirler ve doğal olarak biraz daha yavaştırlar,ayrıca nesne sayısı arttıkça bu yavaşlamada artar sonuç olarak doğal dil ile yazılmış benzer programa göre yavaş kalır.

SWT bu sorunu çözmek için oluşturulmuş bir kütüphanedir.SWT Javanın Swing kütüphanesinin hızlı bir alternatifidir.SWTnin yapısı şı şekildedir.

SWT de nesneler 2 şekildedir,işletim sistemi nesneleri ve java ile yazılmış işletim sistemi nesnesi kullanan sınıflar.Bunu sağlayabilmek için SWT JNI dan yararlanır,yani işletim sistemi sınıfları ile JNI aracılığı ile iletişim kurar.

Her işletim sistemi kendine özgü bir GUI yapısına sahiptir fakat ne kadar da farklı olsalarda bazı noktalar her zaman aynıdır,her işletim sisteminde pencere vardır,bir ana pencere (root pencere) vardır ve mesajlaşma yöntemleri benzerdir.

SWT Javanın her platforma taşınabilir olmasını sağlayabilmek için OS isimli bir Java sınıfı yaratmıştır,Bu sınıf alt taraftaki işletim sistemi ile üst taraftaki SWT nesneleri arasındaki iletişimi sağlamaktadır.Bu iletişim olay mekanizmasını,pencere mesajlarını vs leri içerir.
OS sınıfı işletim sistemi olaylarını SWT ye aktarır SWT de olay bilgilerini ilgili nesneye aktarır ve nesne kendi lojiği ve olayın tipine göre boyama işlemini gerçekleştirir.Nesne işletim sistemi nesnesi ise boyama işlemi sırasında işletim sistemi nesnelerini kullanır ve göreceli olarak Javaya göre daha hızlı işlem yapar.
SWT OS sınıfı aracılığı ile sağladığı olay mekanizması ve işletim sistemi nesneleri ile aksiyonun gerçekleşmesini sağlar,ayrıca temel işletim sistemi nesneleri (boyanabilir nesneler) kullanarak kendi nesnelerini yazmıştır böylece nesne çeşitliliğini artırmıştır.
SWT kütüphanesini indirip kullanmak için : http://www.eclipse.org/swt adresinden kütüphane sınıflarını indirebilirsiniz.
http://www.eclipse.org/swt/snippets/ adresinden de nesnelerin örnek kodlarına erişebilirsiniz.

3 Yanıt

  1. Güzel bir yazı olmuş ellerinize sağlık.

    Ben de bir ara java gruplarında hararet ile tartışılnca SWT yi denemiştim ama sanki çalıştırabilmek adına system32 içine 1 adet dll kopyaladığımı hatırlıyorum. Sonra da bu kafamda acaba SWT javanın platform bağımısızlığına gölge düşürür mü diye düşünmüştüm.

    SWT tasarımı için okuyucularınıza JIGLOO ve WINDOWS BUILDER programlarını tavsiye ederim. Gerçekten güzel. SWT bence SWING’in hızı yüzünden .net’e geçenlere iyi bir çevap oldu. Pek sanmıyorum ama SUN da desteklerse çok iyi yerere gelebilir. JDK 1.6 ile SWING adına yapılan iyileştirmeler ne gibi bir performans artışı sağladı merak ediyorum..

  2. İbrahim bey öncelikle yorumunuz için teşekkür ederim.
    Swt dll’leri JVM’nin kütüphane arama yolu üzerinde olduğu sürece her yere koyulabilir.Yani yazdığınız bir SWT programını windows üzerinde çalışması için swt dll’lerini program ile aynı dizine koyarsanız bu Dll’lerin yerini programın başlatma parametresinde belirtmelisiniz ( -Djava.library.path=. > “.” işareti aktif dizin demek).
    “java.library.path” JVM parametresi ile JVM nin dll’leri aradığı standard dizinlere,programın olduğu aktif dizini de eklemiş olursunuz.Böylece JVM swt dll’lerini bulur.System32 bir standard dizin olduğu için parametre ile uğraşmak istemeyenler dll’leri oraya atıyorlar ama bence çok yanlış bir davranış, işi anlamayan kişilerin davranışıdır.
    SWT Javanın platform bağımsızlığına şu an itibari ile gölge düşürmüyor çünkü neredeyse her platform için bir kütüphane hazırladılar.UNIX,Linux,Windows,MacOS hepsi için kütüphane var.
    Swing yapısından dolayı bence SWT kadar hızlı olamaz. Çübkü Swing tamamen java kodlarından oluşuyor yani her swing nesnesi aslında bir java sınıfı böyle olunca da hafızada gereken yer büyüyor ve doğal olarak sınıflara erişim için geçen süre artıyor gerisini tahmin edebilirsiniz. SWT de böyle bir sorun çok az SWT görsel nesneleri işletim sistemine ait yani hem daha az yer kaplıyor hem de tepki süresi daha hızlı doğal koda sahip nesneler kullandığı için.
    Ben şu anda tasarım için Eclipse kullanıyorum Eclipse 3.2 ile find and install özelliğini kullanarak Visual Editör adıl plugini indirdim, Eclipse kullananlar biliyordur Callisto adlı paketi onun içinden çıkıyor. Biraz fazla ram kullansa da işimi görüyor. Dediklerinizi bi inceleyeyim ama eclipse’den vazgeçmek zor onu biliyorum :)

  3. Ben de yazınız için teşekkür ediyorum. Dediğim araçlar da Eclipse eklentisi zaten Eclipseden vazgeçmek olmaz. Bence Eclipse bir standat olacak. Zamanla daha da iyi yerlere gelece e düşünüyorum.
    Zaten benim de bu yönde alışmalarım var.Eclipse kullanıcılarını bir araya getirecek bir proje düşünyorum kısmet olursa. borland bile JBuilder 7 ile eclipse tasindi. Tum ibm urunleri eclipse tabanlı vs vs. Yani Eclipse kullanmaya devam.

    Kolay gelsin

Yorum Yapın