У меня есть программа, в которой я пытаюсь выполнить задачу, подождать секунду, переместить индикатор выполнения, а затем выполнить другую задачу, подождать, индикатор выполнения, выполнить и т. д.
Если я использую
Thread.sleep()
он замораживает мой графический интерфейс, не позволяя моему индикатору выполнения двигаться. Я пробовал следующие вопросы:
Заставить что-то ждать без использования Thread.sleep()?
Заставьте Java-программу спать без потоков
Мой код похож на этот:
import java.util.*
...
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
try {
Runtime.getRuntime().exec("cmd /c del file");
} catch (IOException ex) {
Logger.getLogger(AdminHome.class.getName()).log(Level.SEVERE, null, ex);
}
}
}, 1000);
progressBar.setValue(16);
timer.schedule(new TimerTask() {
@Override
public void run() {
try {
Runtime.getRuntime().exec("cmd /c del file");
} catch (IOException ex) {
Logger.getLogger(AdminHome.class.getName()).log(Level.SEVERE, null, ex);
}
}
}, 1000);
progressBar.setValue(32);
timer.schedule(new TimerTask() {
@Override
public void run() {
try {
Runtime.getRuntime().exec("cmd /c del file");
} catch (IOException ex) {
Logger.getLogger(AdminHome.class.getName()).log(Level.SEVERE, null, ex);
}
}
}, 1000);
progressBar.setValue(48);
timer.schedule(new TimerTask() {
@Override
public void run() {
try {
Runtime.getRuntime().exec("cmd /c del file");
} catch (IOException ex) {
Logger.getLogger(AdminHome.class.getName()).log(Level.SEVERE, null, ex);
}
}
}, 1000);
progressBar.setValue(64);
timer.schedule(new TimerTask() {
@Override
public void run() {
try {
Runtime.getRuntime().exec("cmd /c del file");
} catch (IOException ex) {
Logger.getLogger(AdminHome.class.getName()).log(Level.SEVERE, null, ex);
}
}
}, 1000);
progressBar.setValue(80);
timer.schedule(new TimerTask() {
@Override
public void run() {
try {
Runtime.getRuntime().exec("cmd /c del file");
} catch (IOException ex) {
Logger.getLogger(AdminHome.class.getName()).log(Level.SEVERE, null, ex);
}
}
}, 1000);
progressBar.setValue(100);
progressBar.setString("Done!");
timer.schedule(new TimerTask() {
@Override
public void run() {
}
}, 1000);
System.exit(0);
Заранее благодарю за любую помощь.
Riccorbypro
it freezes my GUI, not allowing my progress bar to move.
Вам необходимо реализовать фоновые задачи (включая ожидание) в отдельном потоке. Взгляните на этот вопрос - person default locale   schedule 17.07.2014SwingWorker.doInBackground
должен сделать то же самое. - person default locale   schedule 17.07.2014