Java Thread (Kanal) kullanımı ile internette pek çok örnek mevcut olmasına rağmen bir örnekte ben vereyim. Felis Project için gerekli bir kod parçacığında Java Thread kullanmak zorunda kaldım. Bunun nedeni ise google’ı iyi bir şekilde (pekte iyi sayılmaz
) aramama rağmen JFrame penceresinin taşınmasına ait hergangi bir window listener kodu bulamamam.
Yapmak istediğim aslında çok basit bir olay. JFrame eğerki kullanıcı tarafından taşınmış ise (yani ekrandaki konumu değişmis ise ) bunu yakalayan bir listener fonksiyonu lazımdı. Ama pencereler ile ilgili dinleyicisine ait; active, deactive , opened, closed, iconified, deiconified gibi fonksiyonların yer almasına karşın benim istediğim türde bir fonksiyon yok.
Bende bu nedenle bu işi thread ile halletmeye karar verdim.
Öncelikle JFrame’den türetilmiş bir Çizim penceresi ve yine JFrame’den türetilmiş bir Araçlar penceresi var. Araçlar penceresi , Çizim penceresinin konumuna bakarak kendi konumunu ayarlamalı. Onun için Araçlar penceresinde Çizim penceresine ait bir referans tanımlıyorum. Sonrasında Araçlar penceresi Örneklenirken aynı zamanda Çizim penceresinin konumunu tarayan bir thread başlatmak gerek (Daha performanslı bir yolu var ise lütfen beni uyarın).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public class AraclarFrame extends JFrame { private CizimFrame cizim; private CizimLocationListener cizimListener; public ToolKitFrame(CizimFrame cizim) { this.cizim = cizim; cizimListener = new CizimLocationListener(); cizimListener.start(); // Konum Taramayı başlatıyoruz. } private class CizimLocationListener extend Thread { public void run() { int x, y; try { while(true) { sleep(200); // İşlemciyi sömürmemesi için biraz bekletiyoruz. x = cizim.getLocation().x + cizim.getWidth() - (getWidth() + 20); // Cizim penceresinin Sağından Araçlar penceresinin genişliği + 20px kadar içeri y = cizim.getLocation.y + getHeight(); // Çizim penceresinin yukarısından Araçlar penceresinin yüksekliği kadar içeri. setLocation(x,y); // Araçlar penceresinin Konumunu yeniden ayarlıyoruz. } } catch(Exception e) { System.out.println("HATA: " + e); } } } } |
İşte bu kadar. windowsta işlemciyi herhangi bir şekilde yormasada, linuxde (ubuntu) acayip bir şekilde işlemciyi kullanıyor. Araştırmalarım devam etmekte. Bu işlemi daha masrafsız nasıl yapabilirim diye düşünüyorum
Tüm bunları anlattıktan sonra Felis’ten bir ekran görüntüsü vereyim.

Programlama ve hayata dair yazılar yazdığım bloguma hoş geldiniz.
Adım Kamil. 23 yaşındayım. Yazılım geliştiricisiyim. Selçuk Üni. Bilgisayar Programcılığı
bölümünden mezunum. Açık Öğretim İktisat Fakultesi 3. sınıf öğrencisiyim. Profesyonel hayatımda java ve php tabanlı
yazılımlar geliştirmekteyim. Antalya'da bir turizm firmasında yazılım geliştirme
uzmanı olarak çalışmaktayım.

