如何在Java Applet中创建倒数计时器?

时间:2014-05-30 19:18:26

标签: java timer applet

我正在为学校的最终项目工作,其中Java applet从给定的时间间隔倒数到零。当屏幕上的矩形经历鼠标按下事件时,它应该执行计时器;但是这不会发生;该程序最终崩溃。我在网上看过很多定时器的例子,但很多人都在使用Java内置的定时器类,我没有使用它。我认为必须有一个更基本的方法来做一个简单的计时器。所有变量都已在类的顶部声明。

public boolean mouseDown(Event e, int x, int y)
    {
    if(start.inside(x,y))
    {
        timerAct = true;
        startTime = System.currentTimeMillis() / 1000;
        endTime = startTime + interval;

        while (System.currentTimeMillis() / 1000 < endTime) {
            while (startTime != System.currentTimeMillis() / 1000) {
                startTime += 1;
                timeLeft = (endTime - startTime);
            }
        }
        timerAct = false;
    }
    repaint();
    return true;
}

逻辑似乎锻炼好了,因为这开始是System.out.println(),它运作得很好。然后,它被转换为存储变量timeLeft。在paint方法中,我有

    g.drawString("Time: " + timeLeft, 420, 180);

打印剩余时间。我也有更新方法;但它似乎并没有什么不同。而且我知道这个问题不是因为我改变了一个变量。我的鼠标按下方法有一个if语句,其中有一个跟踪点击的不同矩形(未显示),它更新了applet窗口中屏幕上点击的计数器而没有任何问题。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

检查this。它非常自我解释。

答案 1 :(得分:0)

以下是编码简单倒数计时器的方法。此代码需要在单独的线程中运行,而不是Event Dispatch thread

private void countdownTimer(int intervalSecs) {
    long endTime = System.currentTimeMillis() + (intervalSecs * 1000L);
    while (System.currentTimeMillis() < endTime) {
        sleep();
        repaint();
    }
}

private void sleep() {
    try {
        Thread.sleep(1000L);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

private void repaint() {
    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            panel.repaint();
        }
    });
}