我如何让这个 java for 循环在每次迭代之间暂停 1/2 秒?

编程入门 行业动态 更新时间:2024-10-23 21:24:54
本文介绍了我如何让这个 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屋!

更多推荐

[db:关键词]

本文发布于:2023-03-28 18:24:50,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/736993.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:迭代   java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!