迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Java >

用 Java 制作倒数计时器

作者:迹忆客 最近更新:2023/10/16 浏览次数:

本文我们将演示如何在不依赖任何第三方库的情况下使用两种方法在 Java 中制作倒数计时器。我们可以在 GUI 窗口或控制台中使用计时器来测试它。看看我们下面的代码!


Java 中使用 ScheduledExecutorService 的倒数计时器

在第一个方法中,我们使用 ExecutorService 接口调用其方法 newScheduledThreadPool(),该方法创建一个使用相同固定数量分配线程的线程池。在 newScheduledThreadPool() 方法中,我们传递了我们想要在池中的线​​程数。在这种情况下,我们只需要一个线程来运行计时器。

Executors.newScheduledThreadPool() 函数返回一个 ScheduledExecutorService 对象,我们将其命名为 scheduler。接下来,我们从 Runnable 接口覆盖 run() 方法。Runnable 实例用于执行线程。在 Runnable 中,我们创建了一个变量 countdownStarter 并使用我们想要启动倒数计时器的秒数对其进行初始化。

现在在 run() 方法中,我们打印 countdownStarter,并将其值减一。为了在计时器达到零时停止计时器,我们创建了一个条件来检查 countdownStarter 值。如果它的值小于零,它会打印一条消息并关闭 scheduler,它是使用 scheduler.shutdown() 命令的 Executor Service。

最后,我们使用 scheduler 对象调用 scheduleAtFixedRate() 方法,该方法定期运行给定的操作并接受四个参数。第一个参数是 runnable 实例;第二个是第一次执行的时间延迟;三是动作之间的延迟。在这里,正如第四个参数所暗示的那样,我们将延迟设为应等于一秒。

import java.util.concurrent.*;

import static java.util.concurrent.TimeUnit.SECONDS;

public class Countdown {
    public static void main(String[] args) {

        final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

        final Runnable runnable = new Runnable() {
            int countdownStarter = 20;

            public void run() {

                System.out.println(countdownStarter);
                countdownStarter--;

                if (countdownStarter < 0) {
                    System.out.println("Timer Over!");
                    scheduler.shutdown();
                }
            }
        };
        scheduler.scheduleAtFixedRate(runnable, 0, 1, SECONDS);
    }
}

输出:

20
19
18
17
16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
Timer Over!

Java 中使用 TimerTimerTask 的倒数计时器

在这个例子中,我们使用了 java.util 包附带的两个类,TimerTimerTask。这两个类都用于调度在后台线程中执行的任务。在这个例子中,我们使用 jFrame 对象在 GUI 窗口中显示计时器。首先,我们创建一个 jFrame 对象,然后是一个显示计时器文本的 jLabel。我们将框架的布局设置为 FlowLayout(),并设置窗口的位置和大小。

接下来,我们将 jLabel 添加到框架中。为了创建倒数计时器,我们创建了一个 Timer 对象并调用它的方法 scheduleAtFixedRate(),顾名思义,它以固定的速率安排和重复指定的任务。

现在,由于 scheduleAtFixedRate() mate 将 TimerTask 对象作为它的第一个参数,我们使用 new TimerTask() 创建一个对象。对于第二个和第三个参数,它们安排要执行的任务以及每次执行之间的时间间隔(以毫秒为单位)。

下一步,我们需要创建一个变量并用我们想要开始倒计时的数字初始化它。然后,我们调用 run() 方法并将 jLabel 组件的文本设置为 i。要停止计时器,我们调用 timer.cancel()

import javax.swing.*;
import java.awt.*;
import java.util.Timer;
import java.util.TimerTask;

public class Countdown {
    public static void main(String[] args) {

        JFrame jframe = new JFrame();
        JLabel jLabel = new JLabel();
        jframe.setLayout(new FlowLayout());
        jframe.setBounds(500, 300, 400, 100);

        jframe.add(jLabel);
        jframe.setVisible(true);

        Timer timer = new Timer();

        timer.scheduleAtFixedRate(new TimerTask() {
            int i = 20;

            public void run() {

                jLabel.setText("Time left: " + i);
                i--;

                if (i < 0) {
                    timer.cancel();
                    jLabel.setText("Time Over");
                }
            }
        }, 0, 1000);
    }
}

输出:

java 倒数计时器

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

如何在 Java 中延迟几秒钟的时间

发布时间:2023/12/17 浏览次数:217 分类:Java

本篇文章主要介绍如何在 Java 中制造程序延迟。本教程介绍了如何在 Java 中制造程序延时,并列举了一些示例代码来了解它。

如何在 Java 中把 Hashmap 转换为 JSON 对象

发布时间:2023/12/17 浏览次数:187 分类:Java

它描述了允许我们将哈希图转换为简单的 JSON 对象的方法。本文介绍了在 Java 中把 Hashmap 转换为 JSON 对象的方法。我们将看到关于创建一个 hashmap,然后将其转换为 JSON 对象的详细例子。

如何在 Java 中按值排序 Map

发布时间:2023/12/17 浏览次数:171 分类:Java

本文介绍了如何在 Java 中按值对 Map 进行排序。本教程介绍了如何在 Java 中按值对 Map 进行排序,并列出了一些示例代码来理解它。

如何在 Java 中打印 HashMap

发布时间:2023/12/17 浏览次数:192 分类:Java

本帖介绍了如何在 Java 中打印 HashMap。本教程介绍了如何在 Java 中打印 HashMap 元素,还列举了一些示例代码来理解这个主题。

在 Java 中更新 Hashmap 的值

发布时间:2023/12/17 浏览次数:146 分类:Java

本文介绍了如何在 Java 中更新 HashMap 中的一个值。本文介绍了如何在 Java 中使用 HashMap 类中包含的两个方法-put() 和 replace() 更新 HashMap 中的值。

Java 中的 hashmap 和 map 之间的区别

发布时间:2023/12/17 浏览次数:79 分类:Java

本文介绍了 Java 中的 hashmap 和 map 接口之间的区别。本教程介绍了 Java 中 Map 和 HashMap 之间的主要区别。在 Java 中,Map 是用于以键值对存储数据的接口,

在 Java 中获取用户主目录

发布时间:2023/12/17 浏览次数:218 分类:Java

这篇文章向你展示了如何在 Java 中获取用户主目录。本教程介绍了如何在 Java 中获取用户主目录,并列出了一些示例代码以指导你完成该主题。

Java 中 size 和 length 的区别

发布时间:2023/12/17 浏览次数:179 分类:Java

这篇文章教你如何知道 Java 中大小和长度之间的区别。本教程介绍了 Java 中大小和长度之间的区别。我们还列出了一些示例代码以帮助你理解该主题。

Java 中的互斥锁

发布时间:2023/12/17 浏览次数:111 分类:Java

了解有关 Java 中互斥锁的一切,在计算机科学领域,互斥或互斥被称为并发控制的属性。每台计算机都使用称为线程的最小程序指令序列。有一次,计算机在一个线程上工作。为了更好地理解,

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便