java 定时器(整点报时)

news/2025/2/11 14:14:48/

java 多线程定时器(整点报时)

实现整点报时的详细步骤

第一 构建时间类

1.构建一个时间类 作为锁 和判断

public class Time { public boolean flag;  // 默认false 判断public Time() {super();}}

第二 构建一直持续输出时间的类

1.记录时间是用的Calendar类 方便处理时间的各个部分
2.传入的 JTextArea 是一个GUI实现的一个文本框 在这里显示时间
3.各个时间值 使用 StringBuffer 拼接起来
4.每次线程都休眠一秒,代表时间一秒就一次刷新时间
5.flag 是用来判断的如果到达整点 依旧输出改时间点 但是 flag改为false
6.使得下面的SetTime类实现报时的效果


import java.util.Calendar;import javax.swing.JTextArea;public class GetTime implements Runnable {private Time t;   //设置判断和作为一把对象锁private JTextArea textArea;  //文本域显示当前时间public GetTime(Time t,JTextArea textArea) {super();this.t = t;this.textArea=textArea;}public void run() {	//使时间都拼接成字符串的形式StringBuffer sb = new StringBuffer();//String s = "sss";String str = null;synchronized(t) {while(true) {//获取当前时间Calendar c = Calendar.getInstance();  //可以对每个时间域单独修改int year = c.get(Calendar.YEAR);int month = c.get(Calendar.MONTH)+1;int date = c.get(Calendar.DATE);int hour = c.get(Calendar.HOUR_OF_DAY);int minute = c.get(Calendar.MINUTE);int second = c.get(Calendar.SECOND);//如果没有整点 就继续显示if(!t.flag) {str = sb.append(year).append("年").append(month).append("月").append(date).append("日").append(hour).append("时").append(minute).append("分").append(second).append("秒").toString();textArea.setText(str);}else{//改变flag状态t.flag=false;}try {Thread.sleep(1000);//清除sb缓冲区的字符串 sb.delete(0, str.length());} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}

第三构建等待整点就报时的时间的类

1.这是一个就是实现整点报时的类
2.如果到了整点,就显示报时,不显示时间,当不是整点是又恢复输出时间


import javax.swing.JLabel;public class SetTime implements Runnable {private Time t;private JLabel setTime;public SetTime(Time t,JLabel setTime) {super();this.t = t;this.setTime=setTime;}@Overridepublic void run() {	while (true) {synchronized (new Object()) {//每次都是重新定义 可以免去删去一直拼接的情况//使时间都拼接成字符串的形式StringBuffer sb = new StringBuffer();String str = null;//获取当前的时间Calendar c = Calendar.getInstance();//可以对每个时间域单独修改int year = c.get(Calendar.YEAR);int month = c.get(Calendar.MONTH);int date = c.get(Calendar.DATE);int hour = c.get(Calendar.HOUR_OF_DAY);int minute = c.get(Calendar.MINUTE);int second = c.get(Calendar.SECOND);//setTime.setForeground(Color.BLACK);//如果没有整点就不显示setTime.setText(" ");//分,秒都等于0 时就是整点if(second==0&&minute==0) {t.flag=true;//改变flag的状态str = sb.append(hour).append("时").toString();//显示时间 并报时setTime.setText("整点报时"+str+"到了");//字体改为红色setTime.setForeground(Color.RED);}try {Thread.sleep(1000);//间隔一秒} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}

最后一步 使用GUI 实现

将整点定时器更好的体现


import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.EventQueue;
import java.awt.Font;import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.event.AncestorListener;
import javax.swing.event.AncestorEvent;public class TimeJFrame extends JFrame {private JPanel contentPane;private Time t;private GetTime g;private SetTime ss;/*** Launch the application.*/public static void main(String[] args) {EventQueue.invokeLater(new Runnable() {public void run() {try {TimeJFrame frame = new TimeJFrame();frame.setVisible(true);} catch (Exception e) {e.printStackTrace();}}});}/*** Create the frame.*/public TimeJFrame() {//设置标题setTitle("整点报时");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(100, 100, 465, 300);contentPane = new JPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));setContentPane(contentPane);contentPane.setLayout(null);JLabel label = new JLabel("当前的时间是:");label.setBounds(14, 13, 125, 34);contentPane.add(label);JTextArea textArea = new JTextArea();textArea.setBounds(14, 65, 428, 45);contentPane.add(textArea);//设置文本域的属性 字体 大小textArea.setFont(new Font("黑体",Font.BOLD,32));t=new Time();//调用GetTime类g=new GetTime(t,textArea);//开始线程new Thread(g).start();JLabel setTime = new JLabel();setTime.setBounds(22, 164, 420, 59);contentPane.add(setTime);//设置标签的属性 字体 大小setTime.setFont(new Font("黑体",Font.BOLD,40));//setTime.setForeground(Color.RED);//显示空格setTime.setText(" ");//调用SetTime类 并开始线程ss=new SetTime(t,setTime);new Thread(ss).start();}
}

效果图
源码:https://github.com/kangz666/-
在这里插入图


http://www.ppmy.cn/news/364012.html

相关文章

利用数字电子计数知识设计并制作的数字电子钟(含multisim仿真),该数字钟具有显示星期、24小时制时间、闹铃、整点报时、时间校准功能

多功能数字电子钟 仿真文件及文章全文请戳末尾链接一、功能1、显示时间2、显示星期3、时间校准4、整点报时5、(扩展功能)定时闹钟 二、原理1、脉冲产生2、计时3、显示4、整点报时5、校准6、闹钟 三、元件清单四、仿真截图五、实物展示六、故障及排查1、显示模块亮度问题的解决2…

java定时器整点报时_整点报时功能

让计算机在整点自动给你报时是不是感觉不错,那我们搞起来 (其实上一期的espeak命令也可以实现,但是我没能学会) 一、首先,我们下一个叫做“mplayer”的软件 二、然后去一个网页下载一个文件 网页:http://download.csdn.net/source…

Java整点报时定时器

今天在改一个开源SpringBoot项目,要拿到Android中使用,所以要去除掉SpringBoot相关的东西,看到项目中使用了SpringBoot的Scheduled(cron "0 0 * * * ?")来添加定时器,非常简洁,就这么一个注解就实现了整点…

数字时钟与整点报时的问题 - C51

数字时钟与整点报时的问题 - C51 题目要求 1.利用8位数码管制作一个24小时制数字时钟,可以显示小时、分钟、秒,且中间有 ’ ’ 或 ’ - 间隔。 2.小时、分钟可以通过按键进行调整。 3.每个整点蜂鸣器发出相应次数的声响,且每秒响1次&#…

Android整点报时

刚开始接到这个需求的时候,首先就想到了开个线程,不停的去扫当前的时间,但是一想这个做法很耗性能,肯定有更好的办法。 果然,在网上百度了个demo,一看别人的代码,原来Android系统里面有个 Inte…

取消电子表的整点报时

取消电子表的整点报时按住 reset 不放,再按 mode,可选择整点报时功能开启/关闭,当整点报时功能开启时,按住 reset,星期应全部显示出来 。

整点报时 单片机 c语言,单片机整点报时编程

① 通过加入若干语句,对mg及ms变量进行控制,实现每当一秒钟到来时mg自动加1;当mg=10(即经历10秒钟)时mg自动清零,同时ms自动加1;当ms=2(即经历20秒)时ms自动清零,最终实现标准时间的…

自动报时数字钟

设计任务和要求: 1、用数字显示时、分、秒。12小时循环一次。 2、可以在任意时刻校准时间,只用几只按钮开关实现,切求可靠方便。 3、能以蜂鸣器自动正点报时,在进时来到后或来到前,进行整点报时。 设计要求分析&#…