Мне нужна одноразовая пауза в этой программе для того, что я пытаюсь сделать. Я показываю некоторый текст в Java Swing JFrame
, перерисовывает его, я жду 1,5 секунды, затем меняю текст.Не могу понять Java Swing Timers. Как сделать 1 временную задержку?
В принципе, я начал с этим:
statusLabel.setText(s);
appFrame.repaint();
Thread.sleep(1500);
statusLabel.setText(y);
appFrame.repaint();
Но это не работает. Thread.sleep()
будет ссылаться до того, как перекраска закончится, что означает, что s никогда не будет отображаться. Я читал много мест, в которых вы не должны использовать Thread.sleep()
в приложениях swing, потому что он приостанавливает все потоки, даже потоки, пытающиеся перерисовать, и чтобы приостановить что-то, вызванное , вам нужно использовать Java Swing Timer.
Что все хорошо и хорошо, за исключением того, что я не могу найти ни одного места, которое предлагает достойное объяснение того, как они работают. Поскольку, насколько я могу судить, таймеры специально используются для повторения событий по таймеру. Я просто хочу 1,5-секундную задержку между двумя рецензиями.
Я попытался сделать это ...
statusLabel.setText(s);
appFrame.repaint();
Timer timer = new Timer(1500, new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
}
});
timer.setInitialDelay(1500);
timer.setRepeats(false);
timer.start();
statusLabel.setText(y);
appFrame.repaint();
... добавить таймер с 1,5 сек начальной задержки, не повторяющимся, и не тела к его событию actionPerformed, так что буквально ничего не делает, но ждать что 1,5 с, но это не сработало.
Возможный дубликат [Использование SwingWorker и Timer для отображения времени на ярлыке?] (Http://stackoverflow.com/questions/9855037/using-swingworker-and-timer-to-display-time-on-a- label) – GSerg