Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Swing: обработка событий, не выходя из цикла.  (Прочитано 8631 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Vantuz-Subhuman
Участник

ru
Offline Offline
Пол: Мужской

« : 01-12-2010 20:30 » 

Здравствуйте.
Не знаю как сформулировать вопрос для поисковика.
'KeyListener' обрабатывает «флаги», показывающие, зажата ли кнопка.
В основном классе бесконечный цикл, глядящий на эти флаги и выполняющий соответствующие действия.
Примерно так:

Код:
boolean keyR, keyL;
while(true)
{
if(keyR)
// do some
if(keyL)
// do another
}
frame.addKeyListener(
new KeyListener()
{
public void keyPressed(KeyEvent e)
{
int kc = e.getKeyCode();
if(kc == 39)
keyR = true;
if(kc == 37)
keyL = true;
}

public void keyReleased(KeyEvent e)
{
int kc = e.getKeyCode();
if(kc == 39)
keyR = false;
if(kc == 37)
keyL = false;
}

public void keyTyped(KeyEvent e) {}
}
);

Вопрос. Как в конце цикла временно вернуть управление программой к ОС, чтобы KeyListener() обработал события (не выходя из цикла)?

Заранее спасибо.
« Последнее редактирование: 02-12-2010 04:02 от Vantuz-Subhuman » Записан

«You should never underestimate the predictability of stupidity»,
«Never attribute to malice that which can be adequately explained by stupidity»
Dimka
Деятель
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 02-12-2010 12:04 » 

Разложить в параллельные потоки KeyListener и цикл, синхронизировать их при доступе к общим переменным вроде keyR, keyL. Переменные разумно поместить в единый разделяемый потоками объект с синхронизируемым доступом к своему содержимому.
Записан

Программировать - значит понимать (К. Нюгард)
Невывернутое лучше, чем вправленное (М. Аврелий)
Многие готовы скорее умереть, чем подумать (Б. Рассел)
Vantuz-Subhuman
Участник

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 02-12-2010 12:59 » 

Значит, без потоков никак.
Спасибо, буду пробовать.
Записан

«You should never underestimate the predictability of stupidity»,
«Never attribute to malice that which can be adequately explained by stupidity»
Man1BLR
Участник

by
Offline Offline
Пол: Мужской

« Ответ #3 : 02-12-2010 23:44 » 

C учетом того, что в приложении с пользовательским интерфейсом помимо потока, в котором запускается метод main, есть еще и поток событий, то можно (даже нужно) в отдельный поток вынести только цикл.
« Последнее редактирование: 02-12-2010 23:50 от Man1BLR » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines