0

我有一个控制电子元件的程序。我的问题是倒计时部分。实际上,如果我从 main 方法调用类 CountDown,它不会返回到 main。该程序必须始终处于活动状态,它会读取 main 中的第一个值以进行调用并开始倒计时。这是代码:

public class CountDown
{
    public static int a;
    public static Timer timer;

    public CountDown()
    {
        timer = new Timer();
        timer.schedule(new DisplayCountdown(), 0, 1000);
    }

    class DisplayCountdown extends TimerTask
    {
        int seconds = 15;
        public void run()
        {
            if (seconds > 0)
            {
                System.out.println(seconds + " seconds remaining");

                if(READING BY ELECTRONIC COMPONENT == 1)
                {
                    seconds=15;
                } else {
                    seconds--;
                }
            } else {
                System.out.println("Countdown finished");
                CountDown.a=0;
            }
        }
    }

    public static void main(String args[])
    {
        CountDown.a = 0;

        while(true)
                {
         if(READING ELECTRONIC COMPONENT == 1)
         {
            if (CountDown.a==0)
            {
                CountDown.a = 1;
                new CountDown();
            }
        }
    }
}
4

1 回答 1

0

我已经检查以确保我的怀疑是正确的。不是你new Countdown()没有返回 main 方法,而是它立即返回。您想要的可能是在循环中进行某种等待while(true)并检查倒计时是否完成。类似于以下内容:

CountDown countDown = null;
while(true)
{
    if (countDown == null || getReading() == 1)
    {
        if (CountDown.a == 0)
        {
            CountDown.a = 1;
            countDown = new CountDown();
        }
    }
    while (countDown.isRunning())
    {
        try
        {
            Thread.sleep(countDown.getRemainingSeconds() * 1000);
        }
        catch (InterruptedException ex)
        {
            // Ignore.
        }
    }
}

显然,您需要实现 isRunning 和 getRemainingSeconds 方法(如果您愿意,您总是可以休眠一段时间,而不是尝试等待正确的时间)。

我还建议尝试通过避免使用静态变量atimer(在构造函数中使用私有变量和设置器/初始化它们)来使此类更适合重用。

于 2012-07-24T11:57:47.467 回答