制作一个不会打断整个程序的倒数计时器?

时间:2016-10-11 12:10:19

标签: java multithreading swing timer awt

所以我正在尝试制作一个反应游戏,你按下开始按钮,一个隐藏的计时器,从1和1之间的随机数倒数到零。 10秒关于java计时器的大多数答案建议使用

  

了Thread.sleep(1000);

然而,这会中断整个程序,而我只想让它倒计时。我该怎么解决这个问题?

按下开始后,程序从随机数倒计时。蓝色图标(下面的整个代码)将变为红色,然后您应该按下它,它将显示您按下它所花费的时间。

代码是焦点:

<section><title>Wing Landing Gear</title>
<p>Each wing landing gear has a leg assembly and
a four-wheel bogie beam. The WLG leg includes a Bogie Trim Actuator
(BTA) and an oleo-pneumatic shock absorber.</p>
</section>

使用的图像文件:

http://imgur.com/DjI8Udr

http://imgur.com/XKQW6DI

整个代码:

 public void countDown() throws InterruptedException {

    int random = r.nextInt((10000 - 1000) + 1) + 1000;

    while(random >= 0){
        Thread.sleep(1000);
        random -= 1000;
    }

    if (random <= 0) {
        button_1.setIcon(img_react);
        repaint();
    }

}

2 个答案:

答案 0 :(得分:2)

你不能只使用mvn sonar:sonar,它不会像你想象的那样工作。相反,您可以使用javax.swing.Timer来做您正在尝试做的事情。

文档中的一些注释(如果您没有阅读它):

  • 计时器使用单个共享线程执行等待。
  • 计时器可以安全地对Swing组件执行操作。
  • 计时器可以安全地对Swing组件执行操作。
  • javax.swing.Timer有两个功能,可以使GUI更容易使用。

我已经修改了here的示例,以展示如何根据您的需求进行调整。它使用您每次定时器完成时生成的随机生成的数字,然后按&#34;开始&#34;。

Thread.sleep()

答案 1 :(得分:1)

我会建议一个不同的架构。为什么你认为你需要“倒数”什么?!

含义:你所关心的只是你想在一段时间之后做“某事”;所以这样的事情(使用伪代码)最终可能会更容易:

now = ... get current time
then = now + random value

schedule the Swing timer to sent some Event X "then"

只需要一些能够对传入的X事件做出反应的代码。