Ждите и меняйте карты в Java
У меня есть JFrame с cardlayout
и две карты. Я хочу, чтобы первая карта отображалась в течение 5 секунд, а затем переключалась на вторую.
Я использовал следующий код:
CardLayout cards=new CardLayout();
panel.setLayout(cards);
panel.add(first,"first");
panel.add(second,"second");
cards.show(panel,"first");
Thread.sleep(5000);
cards.show(panel,"second");
Однако вторая карта показывается напрямую.
1 ответ
Решение
Качели однопоточные. Вы блокируете EDT
с призывом к Thread.sleep
предотвращение раскраски первой карты. Таймеры Swing были разработаны для взаимодействия с компонентами Swing. Используйте один вместо этого, чтобы вызвать CardLayout#show
в таймере ActionListener
,
Timer timer = new Timer(5000, new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
cards.show(panel,"second");
}
});
timer.setRepeats(false);
timer.start();
Читайте: параллелизм в Swing