Получаете ClassCastException при попытке динамически вставить RelativeLayout?

Хорошо, что вы удалили Thread.sleep, так как ваш пользовательский интерфейс не реагирует на эти 2 секунды.

Что вы можете сделать, это запустить Timer, который запускается только один раз:

int delay = 2000;
Timer timer = new Timer( delay, new ActionListener(){
  @Override
  public void actionPerformed( ActionEvent e ){
    jLabel12.setForeground( Color.red );
  }
} );
timer.setRepeats( false );
timer.start();

Обратите внимание, что Timer является javax.swing.Timer, что гарантирует, что метод actionPerformed для ActionListener вызывается в потоке отправки событий, соблюдая правила потоковой передачи Swing.

Это также возможно с помощью SwingWorker, но для этого я буду придерживаться Timer. Если вы хотите использовать SwingWorker, вы можете просто использовать Thread.sleep в методе doInBackground() и обновить JLabel в методе done().

Что-то в строках

class Delay extends SwingWorker<Void, Object> {
 @Override
 public void doInBackground() {
  Thread.sleep( 2000 );
 }

 @Override
 protected void done() {
   jLabel12.setForeground( Color.red );
 }
}
13
задан slayton 6 April 2012 в 16:06
поделиться