У меня есть программа, в которой я пытаюсь выполнить задачу, подождать секунду, переместить индикатор выполнения, а затем выполнить другую задачу, подождать, индикатор выполнения, выполнить и т. Д.Java timer - выполнить задачу, подождать, выполнить задачу. Нет Thread.sleep()
Если я использую
Thread.sleep()
он замораживает мой графический интерфейс, не позволяя моему индикатору хода двигаться. Я попытался следующие вопросы:
Make something wait without using Thread.sleep()?
Make a java program sleep without threading
Мой код похож на этот:
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
Вам нужно будет запустить GUI в отдельном потоке, чем ваши задачи –
'замораживает мой GUI, не позволяя мой прогресс бар двигаться . Вам нужно реализовать фоновые задачи (ожидающие включены) в отдельном потоке. Взгляните на [этот вопрос] (http://stackoverflow.com/questions/2668389/java-gui-need-to-pause-a-method-without-freezing-gui-aswell) –
@defaultlocale Я пробовал SwingWorker, безрезультатно. Что еще я могу попробовать? – Riccorbypro