Thread.sleep и UI

java Программирование Потоки

Есть кусок кода:
...
update(logic.getBoard());
try{
Thread.sleep(2000);
} catch (InterruptedException e1) {
e1.printStackTrace();
}
....
private void update(int[][] board) {
for (int i = 0; i < ROWS; i++) {
for (int j = 0; j < COLUMNS; j++) {
switch (board[i][j]) {
case 0:
map[i][j].setBackground(defaultBackground);
break;
case 1:
map[i][j].setBackground(Color.BLACK);
break;
case 2:
map[i][j].setBackground(Color.WHITE);
break;
}
}
}
status.setText("Score: Player1 - " + logic.getSumPlayer(1) + ", Player2 - " + logic.getSumPlayer(2));
}
...

Метод update стоит раньше Thread.sleep(), но реально выполняется после задержки (перерисовывается доска).. Почему?? И как эту проблему можно решить?

Примечание:
doronin.m
что это значит? не помогло..
Ответы:
просто мистика какая то
если ничего не путаю, то метод update() надо сделать synchronized
странно, а если вместо update(logic.getBoard()); написать какую-нибудь другую команду, то также она выполняется после слипа?
1. Все манипуляции с UI надо производить только в EDT.
2. Swing во многом придерживается событийной модели и если вы в EDT делаете Thread.sleep, то вы скорее всего отложете и обновление UI,
3. InterruptedException обрабатывается неправильно.
4. А есть ли смысл в Thread.sleep? Обычно либо используется Observer и модель (board) уведомляет о своих изменениях, либо заводится таймер.


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.