如何在每次迭代之间使此Java for循环暂停1/2秒? [英] How do I make this java for loop pause for 1/2 a second between each iteration?

查看:1010
本文介绍了如何在每次迭代之间使此Java for循环暂停1/2秒?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆