31
Aralık

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 :D ) 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.

Yorum yapın

Yorum yapabilmek için giriş yapmalısınız.

kamil örs 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.
Ara
Kategoriler & Arşiv
Haftanın Sözü
" önemli olan akıllı olmak değil, aklı yerinde ve zamanında kullanmaktır. "
Descartes
Özgürlük İçin Pardus!
Pardus... Özgürlük İçin... Pardus... Özgürlük İçin...