繁体   English   中英

Java内有Thread.sleep时计时器不会停止

[英]Timer won't stop when there is a Thread.sleep inside Java

您好,我有这段代码来使用javafx显示图像

public  void CantaCarta() throws InterruptedException {
            startGame.setDisable(true);
                Timer timer = new Timer();
            timer.scheduleAtFixedRate(new TimerTask() {
                @Override
                public void run() {
                    SwingUtilities.invokeLater(() -> {
                        for (int x=1; x<55;x++){

                            Image image = new Image(getClass().getResource("imgs/"+JuegoLoto.Muestra(x-1)+".jpg").toString(), true);
                            cantada.setImage(image);
                            if (x >= 54) {
                                System.out.print("Termina");
                                timer.cancel();
                            }  else {
                                System.out.print(" "+x+" ");

                                try {
                                    Thread.sleep(200);
                                } catch (InterruptedException ex) {
                                }
                            }


                        }
                    });
                }
            }, 0, 1000);

     }

图像将正确显示,但当屏幕上出现图像编号54时,它将循环返回1,这是因为

 Thread.sleep(200);

我该如何解决? 我想延迟图像之间的时间

这没有任何意义。

  • 您正在计划一个计时器任务,每1000毫秒运行一次。
  • 该任务有54个内部迭代,每个迭代显示一个图像,并且在所有情况下(最后一次睡眠持续200ms)。
  • 到目前为止的总时间为10600毫秒,加上显示图像所需的时间
  • 计时器将在1000ms之后重新安排任务:
  • 该任务将在上一次迭代时取消计时器。

这样您将获得:

  • 53张图像和53 200ms睡眠
  • 完成大约10%的任务后重新启动任务
  • 第54张图片
  • 计时器被取消。

因此,您将获得大约十或十一个任务的迭代,大部分是并行的。

我建议你:

  • 200ms的间隔安排任务,使每次调用时都显示下一个顺序图像,环绕到开始处或取消计时器,或者在到达最后一个图像时进行所需的任何操作,以及

  • 摆脱内部循环。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM