какое-нибудь решение для этого?
в этом нет ничего плохого, этот код отлично работает, но проблема здесь в том, что когда этот цикл выполняется, он выполняется в мгновение ока!
ваш лучший друг в этом случае - класс javax.swing.Timer
, и пример покажет вам, как его использовать и, надеюсь, решить вашу проблему,
таймеры имеют собственный общий Thread
, поэтому вам не нужно об этом беспокоиться, он будет работать без зависания вашего интерфейса или блокировки кода.
//this int determines the time delay for each time it executes it's actions
private int delay = 20;
private int times = 0;
private String text = "Loading ";
private Timer textTimer;
private class TimerAction implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
times++;
String theSetText = text;
for (int i = 0; i < times; i++) {
theSetText += ".";
}
if (times == 3) {
times = 0;
}
}
}
вы всегда можете добавить больше слушателей действия с помощью метода timer.addActioListener
, и он тоже будет зациклен там.
для вашей проблемы просто добавьте приведенный выше код в ваш класс и добавьте замену цикла в вашем коде на
textTimer = new Timer (delay,new TimerAction ());
textTimer.start();
и когда наступит подходящий момент (как вы хотите), когда вы хотите, чтобы это прекратилось, просто наберите
textTimer.stop();
чтобы остановить работу таймера.
вот ссылка, чтобы узнать больше о теме Как использовать Swing Timers