如何在每次迭代之间使此Java for循环暂停1/2秒? [英] How do I make this java for loop pause for 1/2 a second between each iteration?
问题描述
private class MultipleGensListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
for(int i = 0; i < 25; i++)
{
game.runSimulationOneGen();
changeGrid();
}
}
}
//这是循环. changeGrid方法在GUI上显示游戏网格,但是 //只有第25次迭代在屏幕上可见.我希望每个人都成为 //在循环继续之前,可以看到约半秒钟. //我在这里看到了一些非常接近我要问的问题的答案, //但我只是不太了解如何将其应用到我的程序中. //感谢您的帮助.
//this is the loop. The changeGrid method displays a game grid on a GUI but // only the 25th iteration is visible on screen. I would like each one to be // visible for about a half a second before the loop continues. // I have seen some questions answered on here that are very close to what I'm asking, // but I just don't really understand how to apply it to my program.. // thanks for any help.
推荐答案
如果模拟执行的代码很快并且不占用过多的CPU和时间,则可以考虑使用Swing计时器进行循环和延迟.否则,您将需要使用后台线程,例如可以通过SwingWorker对象完成的线程.
If the code performed by the simulation is quick and does not consume too much CPU and time, then consider using a Swing Timer to do your looping and delay. Otherwise, you'll need to use a background thread such as can be done with a SwingWorker object.
例如如果同时使用Swing Timer和SwingWorker:
For e.g. if using both Swing Timer and SwingWorker:
private class MultipleGensListener implements ActionListener {
protected static final int MAX_INDEX = 25;
public void actionPerformed(ActionEvent e) {
int timerDelay = 500; // ms delay
new Timer(timerDelay, new ActionListener() {
int index = 0;
public void actionPerformed(ActionEvent e) {
if (index < MAX_INDEX) { // loop only MAX_INDEX times
index++;
// create the SwingWorker and execute it
new SwingWorker<Void, Void>() {
@Override
protected Void doInBackground() throws Exception {
game.runSimulationOneGen(); // this is done in background thread.
return null;
}
@Override
protected void done() {
changeGrid(); // this is called on EDT after background thread done.
}
}.execute(); // execute the SwingWorker
} else {
((Timer) e.getSource()).stop(); // stop the timer
}
}
}).start(); // start the Swing timer
}
}
这篇关于如何在每次迭代之间使此Java for循环暂停1/2秒?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!