Прошу прощения за такой вопрос новичка, я пытаюсь установить задержку между изменением цвета двух полей JText, то есть:

 box1.setBackground(Color.yellow);
 box2.setBackground(Color.red);

Я пробовал использовать:

try {
    Thread.sleep(1000); 
}catch(InterruptedException ex) {
    Thread.currentThread().interrupt();
}

Однако при его использовании задержка происходит мгновенно , и оба цвета меняются только после задержки. Заранее спасибо за любой свет, который вы пролили на мою ситуацию :)

-1
Luke h 27 Мар 2013 в 18:00
1
Где в контексте кода вы вызываете Thread.sleep(1000)? Вы должны вызывать его между вызовами setBackground(), это то, куда вы его вызываете?
 – 
Quetzalcoatl
27 Мар 2013 в 18:02
Да, когда я вызываю его между двумя изменениями цвета, он игнорирует первое изменение, запускает задержку, а затем вызывает оба изменения цвета одновременно
 – 
Luke h
27 Мар 2013 в 18:04

1 ответ

Лучший ответ
box1.setBackground(Color.yellow);
new Thread(new Runnable(){
   public void run(){
       try{
          Thread.sleep(1000);
       }catch(InterruptedException ex){
          ex.printStackTrace();
       }
       box2.setBackground(Color.red);
   }
}).start();

Если вы выполните Thread.sleep (1000); в основном потоке рендеринг страницы будет выполнен после выхода из спящего режима, и вы увидите, что оба поля меняют свой цвет.

Если сон выполняется в другом потоке, отличном от основного, рендеринг mainThread будет выполнен сразу после запуска нового потока, и вы увидите, что первый блок меняет свой цвет. После перехода в режим сна box2 изменит свой цвет. Извините за мой английский, надеюсь, вы его понимаете :)

1
Jayyrus 27 Мар 2013 в 18:11
Спасибо, Джек, это работает отлично, не могли бы вы объяснить, что происходит в этом коде?
 – 
Luke h
27 Мар 2013 в 18:05