2012-05-14 18 views
6

GUI'yi değiştiriyorsanız ve ActionListener gibi AWT Olayı Gönderme iş parçacığısınızysanız, SwingUtilities.invokeLater(Runnable) kullanıyor musunuz?SwingUtilities.invokeLTT içinde AWT Olayı Gönderme Olayı

+0

Neyi başarmaya çalıştığınıza bağlıdır. – Jeffrey

+0

@Jeffrey Üzgünüm, soruyu düzenledim. – Stripies

+3

Hala yapmaya çalıştığınız şeye bağlı. Bir 'ActionListener'ın' actionPerformed' yöntemindeyken, EDT üzerindesiniz. Bununla birlikte, diğer tüm dinleyiciler aynı olayı işledikten sonra bazı eylemleri gerçekleştirmeniz gereken bazı durumlar vardır, bu durumda 'invokeLater' kullanmalısınız. Peki, aslında ne yapmaya çalışıyorsun? – Jeffrey

cevap

5

Her zaman GUI güncelleştirmelerini Olay Sevk Ipinde (EDT) yapmalısınız. Ancak, Jeffrey yorumlarda belirtildiği gibi, bir Swing nesnesi üzerindeki ActionListener.actionPerformed yöntemi, EDT'den çağrılmış olan zaten'dur. sadece JButton/unenabled etkin bakmaya veya JList öğeleri ekle/kaldır, ve senin bir Swing bileşeni bir ActionListener aracılığıyla bu değişiklikleri istiyorsanız

, o zaman açıkça SwingUtilities.invokeLater çağırmak zorunda olmamalıdır.

+1

+1, OP bir “JTextComponent” sini temizlemeye çalışıyorsa veya “JScrollBar” konumunu yeniden konumlandırıyorsa, invokeLater gerekli olabilir. Ama sadece bir JButton'u etkinleştirme/devre dışı bırakma ve bir "JList" 'i değiştirme gibi görünse de öyle değil. – Jeffrey

+0

@Jeffrey Bunu yapsam neden gerekliydi? – Stripies

+0

EDT'de olduğumuz sürece, 'invokeLater' kullanmak oldukça işe yaramaz. Açıkça, daha sonra bir noktada bir şey çalıştırmak istiyorsak, her zamanki gibi aynı kısıtlamalar geçerlidir (yani, sadece EDT'den bir iplik başlattığımız için bize hiç yardımcı olmuyor). – Voo