用 Java 制作倒数计时器
本文我们将演示如何在不依赖任何第三方库的情况下使用两种方法在 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 中使用 Timer
和 TimerTask
的倒数计时器
在这个例子中,我们使用了 java.util
包附带的两个类,Timer
和 TimerTask
。这两个类都用于调度在后台线程中执行的任务。在这个例子中,我们使用 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 中创建 swing 计时器
发布时间:2023/10/17 浏览次数:75 分类:Java
-
本文介绍 Java 中的 swing 定时器。本教程介绍了如何在 Java 中创建和调用 swing 计时器。Time 是 Swing 中的一个类,用于根据指定的时间间隔执行任务。
Java 中的排序比较器
发布时间:2023/10/17 浏览次数:162 分类:Java
-
本文介绍 Java 中的排序比较器及其使用方法。本文定义了 Java 中的排序比较器是什么,并演示了如何在进程中使用它。
在 Java 中创建有序映射
发布时间:2023/10/17 浏览次数:200 分类:Java
-
本文介绍如何在 Java 中创建有序映射。映射是 Java 中存储键值对的数据结构。映射是存在于 Collection 层次结构中的 interface。
Java 中的选择排序算法
发布时间:2023/10/17 浏览次数:151 分类:Java
-
本教程演示了 Java 中的选择排序算法。选择排序是首先选择列表或数组中最小的元素并与第一个元素或数组交换的方法;然后,第二个缩小的元素与第二个元素交换。
在 Java 中使用 stream.orted() 对列表进行排序
发布时间:2023/10/17 浏览次数:54 分类:Java
-
本文介绍了如何在 Java 中使用 Stream sorted() 方法。这也演示了如何使用比较器对用户定义的列表进行流排序。本教程将详细介绍 Java 中的 Stream API 提供的 stream sorted() 方法。
Java 中拓扑排序的实现
发布时间:2023/10/17 浏览次数:87 分类:Java
-
我们将在 Java 中使用深度优先搜索技术在有向无环图上实现拓扑排序算法。这篇深入的文章将教你如何以递归顺序在有向无环图上实现拓扑排序。本教程分为两个部分。
Java 基数排序算法
发布时间:2023/10/17 浏览次数:200 分类:Java
-
本教程详细解释了基数排序算法并演示了 Java 中的实现。在基数排序算法中,元素的排序首先将具有相同位值的单个数字分组,然后按照升序或降序排序。本教程详细解释了基数排序算法,并演
如何在 Java 中连接两个列表
发布时间:2023/10/17 浏览次数:99 分类:Java
-
在 java 中可以使用不同的方法来连接两个列表,而不改变原来的列表,比如流、参数化构造函数、Predeclared List 和 addAll()方法。