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.
SwingWorker'dan doğrudan bahsetmeyi özledim, aksi halde çok iyi bir cevap. – extraneon
@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
, 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