2011-01-21 19 views
7

Şu anda Swing'i öğreniyorum ve genel olarak GUI geliştirmeye yeni yaşıyorum. benim test uygulamasında, tek bir olay kaynağı için birden fazla etkinlik listners var ve bu olay dinleyicilerimdendi ilk excecuted edileceği merak ediyorum.Java Tek Bir Olay İçin Tek Bir Olay Kaynağı için Çoklu Olay Dinleyicilerini Salıncak

Ayrıca, tek bir olay kaynağı için birden dinleyeni, özellikle Salıncak olay işleme tek iş parçacıklı ortamda nasıl çalıştığını bilmek merak ediyorum. Son olarak, Swing'de birden fazla iş parçacığı kullanmam gereken bazı yaygın durumları bilmek istiyorum.

Teşekkürler!

cevap

12

Sorularınızın tümünü cevaplamaya çalışacağım. Her şeyden önce, ActionListener yangının emri belirtilmemiş. Birisi asla ateş edeceği belli bir emir almamalıdır. Eğer belirli bir düzen içinde gerçekleşmesi eylemleri gerekiyorsa, aynı ActionListener koyun.

Swing'i programlarken, "neredeyse" her zaman çok parçalı bir ortamda olacaksınız. Olay sevk iş parçacığı (EDT) adlı bir iş parçacığı vardır. Bu, tüm olayları işleyen iş parçacığıdır. Yaptığınız diğer işlemler farklı bir iş parçacığı üzerinde yapılmalıdır, aksi takdirde Swing GUI'niz yanıt vermeyebilir.

Swing birden çok iş parçacığı için bir olası neden, uzun bir miktarda alır bazı işlem yapmak gerekir herhangi zamanıdır. (Yoğun hesaplamalar, IO, veritabanı bağlantıları) Sen EDT ayrı bir iş parçacığı üzerinde zor işi yapmak isteyecektir. Bu GUI yanıtınızı koruyacaktır.

Oracle ağında Swing'de eşzamanlılık hakkında harika bir eğitici bulunur. check it out'u tavsiye ederim. parçacığı aşağıdaki türleri ile

bir salıncak programcı fiyatları:

  • ilk konu, ilk uygulama kodu çalıştırmak parçacığı.
  • tüm olay işleme kodu yürütüldüğünde olay sevk ipliği. Swing framework ile etkileşime giren kodların çoğu bu iş parçacığı üzerinde de çalıştırılmalıdır.
  • çalışan iş parçacıkları, aynı zamanda zaman alıcı bir arka plan görevler yürütülür arka parçacığı olarak bilinir.

Swing herhangi çoklu iş parçacığı sorulara kanonik cevap SwingWorker kullanmaktır. EDT ile ayrı bir iş parçacığı üzerinde arka plan çalışmasını kolayca koordine etmenizi sağlar. Her zaman olduğu gibi, Oracle'ın bir great tutorial on how to use SwingWorker vardır.

+1

SwingWorker'dan doğrudan bahsetmeyi özledim, aksi halde çok iyi bir cevap. – extraneon

+0

@extraneon: evet 'SwingWorker' Swing çoklu iş parçacığı için kanonik cevaptır. Sonunda buna hızlı bir not ekleyeceğim. Tasarım açısından bakıldığında – jjnguy

+2

, onlar ayarlanır sırayla yürütebileceği diğer ActionListeners (veya başka bir sınıf) kayıt hangi bir ActionListener yapmak mümkündür. – extraneon

İlgili konular