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/-

java 定时器(整点报时)相关推荐

  1. java定时器整点报时_单片机 整点报时 定时小闹钟程序

    #include #include #include #define uchar unsigned char #define uint unsigned int uchar code segtbl[] ...

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

    让计算机在整点自动给你报时是不是感觉不错,那我们搞起来 (其实上一期的espeak命令也可以实现,但是我没能学会) 一.首先,我们下一个叫做"mplayer"的软件 二.然后去一个 ...

  3. Java报时用什么制作_简单实现一个整点报时的软件

    突然又个小需求.电脑整点报时.不想下载网络那些不明的软件,而且这个功能不难.自己实现吧. 首先是播放,wav声音就用华为自带的闹钟声音 Alarm_Beep.wav .  就是以前闹钟的滴滴滴声. # ...

  4. 一文吃透JAVA定时器格式

    JAVA 定时器时间格式 ​ 基本格式: [秒]  [分]  [小时]  [日]  [月]  [周]   [年] 序号 说明 是否必填 允许填写的值 允许使用的通配符 1 秒 是 0-59 ,   - ...

  5. java定时器的使用

    java定时器的使用(Timer) 1.在应用开发中,经常需要一些周期性的操作,比如每5分钟执行某一操作等. 对于这样的操作最方便.高效的实现方式就是使用java.util.Timer工具类. pri ...

  6. java定时器时间配置

    java定时器时间配置 这些星号由左到右按顺序代表 : * * * * * * * 格式: [秒] [分] [小时] [日] [月] [周] [年] 序号 说明 是否必填 允许填写的值 允许的通配符 ...

  7. 51单片机 Proteus仿真 时钟 串口 发送时钟 整点报时

    #include "reg52.h" #include <intrins.h> #include <string.h> #include <stdio ...

  8. python报时功能_Python(PyS60)实现简单语音整点报时

    本文实例为大家分享了python语音整点报时的具体代码,供大家参考,具体内容如下 主要的技术特殊点在于PyS60的定时器最多只能定2147秒.在手机上直接写的. import e32 import a ...

  9. c语言时钟程序整点报时,单片机开发的(带整点报时、音乐闹钟)电子时钟(一)...

    整个电路由一台单片机和一些外围电路组成.它的计时采用单片机内部的定时器,其晶振频率为11.0592MHz.其主要功能都是通过C语言编程来实现的.其显示部分用四位数码管来显示,能同时显示小时和分钟.它主 ...

最新文章

  1. 用mysqlworkbench生成ER图
  2. ASP.NET dropdownlist绑定数据却显示System.Data.DataRowView
  3. 数据分析师免费课程网址
  4. STL之adjacent_difference
  5. 所有的低谷,都是为了更上一层楼
  6. C++之std::bind()用法
  7. textbox内容转为字符串_【公告】整改文章内容
  8. openwrt 需要高级浏览器_树莓派 + OpenWrt 实现 BT 下载机
  9. ESP8266制作简单wifi风扇控制器
  10. 官方免费数据下载全国行政区划具体到村
  11. 感谢生命中的每一次遇见
  12. 《英语语法新思维 基础版1》读书笔记(一)
  13. 一张纸厚度是多少毫米_一张a4纸的厚度是多少mm
  14. 帝国php改密码后登录不进去,帝国CMS安装,后台,登陆,密码常见问题汇总
  15. [后缀数组][trie合并][启发式合并][并查集] LOJ #6198. 谢特
  16. 缓慢变化维解决方案——拉链表实现详解
  17. 【前端】菜单栏设计(html、css)
  18. Python+pandas分离Excel数据到同一个Excel文件中多个Worksheets
  19. 地磁传感器标定技术综述(1)
  20. HC32F460开发之看门狗功能

热门文章

  1. 希腊字母大小写及其读音、英文
  2. spring security_一文肝爆Spring安全框架Spring Security
  3. 社团结构的划分及实现过程
  4. 航天中认软测/测试实习生
  5. 行业分析-磁共振造影剂市场现状及未来发展趋势
  6. Acwing - Linux基础课(九)- docker教程
  7. mysql 输出名称_MySQL常用的SQL语句//输出所有信息showfullfieldsfrom'表名称';//改表
  8. 基于开源SATA核的PCIE-SATA设计
  9. 读《鬼谷子的局》笔记
  10. Android项目打包成aar文件并在其他项目引用,作为依赖包