如何在Java小程序中创建倒计时计时器?

如何在Java小程序中创建倒计时计时器?,java,timer,applet,Java,Timer,Applet,我正在为学校做最后一个项目,使用一个Java小程序,从给定的时间间隔倒计时到零。当屏幕上的一个矩形遇到鼠标按下事件时,它应该执行计时器;然而,这并没有发生;程序最终崩溃了。我在网上看到了很多定时器的例子,但是很多都使用Java的内置定时器类,我没有使用它。我想一定有更基本的方法来做一个简单的计时器。所有变量都已在类的顶部声明 public boolean mouseDown(Event e, int x, int y) { if(start.inside(x,y)) {

我正在为学校做最后一个项目,使用一个Java小程序,从给定的时间间隔倒计时到零。当屏幕上的一个矩形遇到鼠标按下事件时,它应该执行计时器;然而,这并没有发生;程序最终崩溃了。我在网上看到了很多定时器的例子,但是很多都使用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;
}

以打印剩余时间。我也有更新的方法;但这似乎没有什么不同。我知道问题不是因为我在改变一个变量。我的mouse-down方法有一个if语句,该语句带有一个不同的矩形,用于跟踪单击(未显示),它会在applet窗口中更新屏幕上的单击计数器,而不会出现任何问题。非常感谢您的帮助。

以下是如何编写一个简单的倒计时计时器。此代码需要在单独的线程中运行,而不是在同一个线程中运行

private void倒计时(int intervalses){
long-endTime=System.currentTimeMillis()+(intervalSecs*1000L);
while(System.currentTimeMillis()
以下是如何编写一个简单的倒计时计时器。此代码需要在单独的线程中运行,而不是在同一个线程中运行

private void倒计时(int intervalses){
long-endTime=System.currentTimeMillis()+(intervalSecs*1000L);
while(System.currentTimeMillis()
以下是如何编写一个简单的倒计时计时器。此代码需要在单独的线程中运行,而不是在同一个线程中运行

private void倒计时(int intervalses){
long-endTime=System.currentTimeMillis()+(intervalSecs*1000L);
while(System.currentTimeMillis()
以下是如何编写一个简单的倒计时计时器。此代码需要在单独的线程中运行,而不是在同一个线程中运行

private void倒计时(int intervalses){
long-endTime=System.currentTimeMillis()+(intervalSecs*1000L);
while(System.currentTimeMillis()
检查。这很容易解释。

检查。这很容易解释。

检查。这很容易解释。

检查。这是不言自明的。

鼠标下降法被贬值了。间隔字段从哪里来?您的双while循环正在使CPU最大化,可能会阻塞GUI。为什么要编写小程序?如果是由于老师的特殊要求,请参考。不幸的是,这是作为最终项目的老师要求。我试着注释第二个while循环,但它仍然崩溃了。间隔来自与级别相关的类变量。这是一个给定的时间段;例如60秒。mouseDown方法被折旧。间隔字段从哪里来?您的双while循环正在使CPU最大化,可能会阻塞GUI。为什么要编写小程序?如果是由于老师的特殊要求,请参考。不幸的是,这是作为最终项目的老师要求。我试着注释第二个while循环,但它仍然崩溃了。间隔来自与级别相关的类变量。这是一个给定的时间段;例如60秒。mouseDown方法被折旧。间隔字段从哪里来?您的双while循环正在使CPU最大化,可能会阻塞GUI。为什么要编写小程序?如果是由于老师的特殊要求,请参考。不幸的是,这是作为最终项目的老师要求。我试着注释第二个while循环,但它仍然崩溃了。间隔来自与级别相关的类变量。这是一个给定的时间段;例如60秒。mouseDown方法被折旧。间隔字段从哪里来?您的双while循环正在使CPU最大化,可能会阻塞GUI。为什么要编写小程序?如果是由于老师的特殊要求,请参考。不幸的是,这是作为最终项目的老师要求。我试着注释第二个while循环,但它仍然崩溃了。间隔来自与级别相关的类变量。这是一个给定的时间段;例如60秒。我将在何处添加此项?你说它需要作为一个单独的线程运行,但我不确定如何做到这一点;我补充说
    g.drawString("Time: " + timeLeft, 420, 180);
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();
        }
    });
}