2010-12-23 16 views
5

Merhaba, acemi geliyorsa sorularım için çok üzgünüm.Ana programın arka planında olay dinleyicisi nasıl kullanılır?

Arka planda çalışan ve her zaman dinleyen bir iş parçacığı uygulamak istiyorum. Dinleyerek demek, ana iş parçacığından döndürülen bir değeri denetlediğini ve vatanın belirli bir sayıyı aşması durumunda, bir yöntem yürüttüğünü ya da programdan çıktığını söyler. Bana bir fikir verebilir ya da en azından yararlı bir şeye başvurabilirseniz, bu harika olur.

cevap

2

Bu iş parçacığının bir döngü içinde çalışmasını istemezsiniz, değeri sürekli olarak yoklar, çünkü bu işlemin işlenmesini sağlar. Değer değiştiğinde, dinleyici aktif olarak bilgilendirilirdi. Bu, izlenen değeri değiştiren herhangi bir kodun özel bir yöntemi çağırmasını gerektirir. Dinleyicinin ayrı bir iş parçacığında çalışması gerekli olmayabilir; bildirildiği zaman dinleyicinin ne yaptığına bağlı olacaktır.

Değeri değiştiren kod değiştirilemezse, yapabileceğiniz en iyi değer, değerleri aralıklarla kontrol etmektir. Hemen bir değişiklik görmezsiniz, ve değişikliklerin bir bütün olarak birden çok kez değişmesi nedeniyle değişiklikleri tamamen gözden kaçırmanız mümkündür.

Bu çözümlerden hangisi durumunuza en uygun?

+0

Cevabınız için teşekkür ederiz. Başlangıçta bir döngü yapmayı düşünüyordum. Aslında windows komut satırı üzerinden harici bir işlem yürütüyorum ve karşılığında izlemeye devam etmem gereken bir değer okuyorum. Yanıtı Dize biçiminde alıyorum ve çekleri uygulamak için onu int. Bu harici işlemi Runtime.getRuntime(). Exec() aracılığıyla döngüde tutmayı ve her 2 saniyede bir düzenli aralıklarla değeri kontrol etmeyi düşünüyordum. Msn olmakta hassas değil. Bunun böyle yapılmasının akıllıca bir fikir olduğunu mu düşünüyorsun? –

+0

@Sara - Planınız bunun için uygun bir yol gibi görünüyor. Bu denetimi çalıştıracak bir iş parçacığı oluşturmak için [ScheduledExecutorService'] 'a (http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ScheduledExecutorService.html) bakmanızı öneririz. sabit bir aralık. – erickson

+0

[Bu StackOverflow sorusu] (http://stackoverflow.com/questions/426758/running-a-java-thread-in-intervals) ve kabul edilen yanıt, "ScheduledExecutorService" işlevinin nasıl kullanılacağı hakkında iyi bir örnek sağlar. – erickson

1

Java Tutorials'da ileti dizileriyle ilgili bazı bilgileri bulabilirsiniz (Java'da eşzamanlılık için yeniyseniz, önce bu eğitimi okumanızı öneririz). Özellikle this section sizin için yararlı olabilir (yeni bir iş parçacığının nasıl oluşturulacağını ve başlatılacağını gösterir).

+0

çok teşekkür ederim. Bu gerçekten yardımcı oldu. –

0

Ben sadece sonra Handling yaklaşık Olay okuyun ve Metin alanı girdi değerlerinin durumu değişikliği dinlemek kolayca mümkün olacak, bir JTextField gibi ana iş parçacığı için bir GUI bileşeni kullanabilirsiniz sanırım.

+0

GUI nesnelerini ihtiyaç duymadığım bir şeyde atık işlemeye çıkarmak istemiyorum. Basit bir çözüm arıyorum. –

+0

Rodion'un cevabına bakabilirsin o zaman. – Ahmed

1

Sadece başka bir konudan bir sonuç için yoklamak gerekiyorsa, @Piotr tarafından önerilen şekilde java.util.concurrent paketini kullanmayı deneyin. Bunun nasıl yapılabileceği somut bir örnektir:

Bu yardımcı olur umarım.

İlgili konular