2012-03-24 2 views
0

В моей программе у меня есть keyListener, установленный на моем холсте. Он отлично работает, но когда я делаю Thread.sleep (1000) keyListener все еще прослушивает и читает ключи, но результат отображается только тогда, когда время ожидания закончилось. Как заставить keyListener не читать или слушать клавиши, набранные во время сна?Отключить keylistener в java

+0

Под «холстом» вы подразумеваете 'java.awt.Canvas'? Пожалуйста, будьте конкретны и используйте правильный случай для имен классов J2SE. Кроме того, для лучшей помощи скорее опубликуйте [SSCCE] (http://sscce.org/). –

ответ

4

Не делать Thread.sleep() с качелями. Из вопроса, я вычитаю, что вы делаете все в EDT (Event Dispatch Thread). Поэтому, если вы поместите EDT в режим сна, он не отключит Swing, он просто приостанавливает эти события на секунду.

Вы можете настроить таймер на одну секунду, а когда вам нужно прекратить получение ключевых событий, просто отключите компонент на setEnabled(false), затем запустите таймер, и когда он закончится, вы вызываете setEnabled(true).

+0

Я уже пробовал делать setEnabled (false) на холсте before и setEnabled (true) после, но keylistener все еще читает ключи. –

+0

Отключает ли события мыши блока компонентов? Я знаю, что он блокирует «ActionListener» от стрельбы, ожидая, что это не повлияет на «MouseMotionListener» (слушатель по-прежнему будет запускать события), но я не уверен в 'MouseListener'. –

+0

@YanIvanEvdokimov у вас есть пользовательский KeyListener? Насколько я знаю, Canvas не имеет KeyListeners самостоятельно. Так что вы не можете просто обновить свой KeyListener, чтобы игнорировать вещи на секунду? –