2012-10-15 23 views
5

Özel etkinlikler ve etkinlik dinleyicileri oluşturmayı öğrenmek için Google'da arama yaptım. Bununla ilgili bazı makaleler okuduktan sonra, hala kafam karıştı. 'un özel olayları (GUI ile ilgili olmayan olayları) ve işleyicileri oluşturma yollarını incelemenizi rica ediyorum. Bazıları özel etkinlikler ve dinleyiciler oluşturmak için basit bir açıklama sağlayabilir mi?Java etkinlikleri ve etkinlik dinleyicileri

Temelde dinleyici EatListener sınıfının içindeki gibi

public interface EatListener { 

    ... 

} 

olarak bir arayüz oluşturmak

cevap

6

, size yöntemin parametre olarak olay ile çağrı yöntemini var; Örneğin, bir EatListener'ı uygulayan veya uygulayan bir İnsana benzer bir sınıfınız olabilir;

gibi gerçek EatEvent öğelerine sahip olmanız gerekir; Muhtemelen bazı ekstra veriler ile gıda için sarıcı kadar basit olabilir.

o arayüzden anonim iç sınıf oluşturabileceğini java herhangi GUI olduğu gibi

: Ben olay bazlı sistemlerden (gui) bir sürü yazdım

new EatListener() { 
    public void onEat(EatEvent event) { 
     System.out.println("I just ate " + event.getFood().getName()); 
    } 
} 
1

ve kendi uygulanmasında birçok FRİKİKLERİNDEN vardır . Klasik şeylerden bazıları, iş parçacığı ve bellek sızıntılarıdır.

İş parçacığı/süreç denetimi basitçe, bir olayı tetiklediğinizde, dinleyicinin ne zaman çağrılacağını - hemen veya daha sonra? Hemen ateş ederseniz, dinleyicinin çağrılmasından hemen sonra değişen bir olaya sürekli tepki veren, gerçekten kötü performans gösteren bir sistemle son bulabilirsin. Burada kolay bir cevap yoktur ve gerçekten ihtiyacınıza göre değişir. Genel olarak, bir etkinliğin ateşlemesini erteleyecekseniz daha iyi performans gösteren bir sisteme sahip olursunuz (çünkü aynı olay için dinleyiciyi birçok kez çağırmaktan kaçınabilir - ya da aynı olaya yol açan olaylar döngüsü)

İkinci büyük hasa, hafıza sızıntısı. Java'daki silmenin olmaması hoş bir şeydir, ancak dinleyiciler ayağınıza bağlanmış dev bir tabancadır. Bir bellek yükü kullanan bir örneğe bağlı bir dinleyiciniz varsa, başka bir nesne bu dinleyiciye bir başvuru içeriyorsa, bu bellek etrafta dolanır. Buna WeakReferences gibi bir sürü çözüm var, ama genel olarak, çok dikkatli olmanız ve uygulamanızı test ederken dinleyicilerin sayısını incelemeniz ve incelemenizden emin olmanız gerekir (liste dışı? :)).

Kısacası, eğer ben olsaydım, şu gibi birçok konuyla birlikte geliştirilen http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/eventbus/package-summary.html http://codingjunkie.net/guava-eventbus/ gibi bir şeyi kullanmayı düşünürdüm.

İlgili konular