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

查看:31
本文介绍了我如何让这个 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 Timer 来进行循环和延迟.否则,您将需要使用后台线程,例如可以使用 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天全站免登陆