Java计时器Timer和TimerTask用法总结(源码)

简介:

      在家学技术实在是不好坚持,心里老是想给自己放个假,但是现在俺又太菜,又想赶赶技术。前天做一个五子棋程序,

遇到了计时器功能的需求,但是这个我没用过,就总结一下吧,不过虽然是会用了,但是和swing的代码整合还是有问题,困扰好久

,到现在也没解决,一气之下,看了三部电影,呵呵。

               这个计时器,就是为了使在下五子棋过程中,黑白双方,轮流下的时候,给下棋一方计时,并且要求,时间动态显示在

面板上,就是一秒一秒在走的效果,等这方下了之后,这方的时间停,另一方的表开始走。因为我这个计时器的时间显示是通过

Graphics手绘在面板上显示的,并不是单独一个文本域显示,所以每走一秒要重绘一次面板,功能需求十分的不爽。而Java实现

倒计时,需要递归调用,本来实现秒表就够麻烦了,还要和JFrame整合在一起,JFrame的状态标识属性又多,看着看着就晕了。

尝试个很多次,都没实现。不过timer这个计时器倒是实现了,其实如果那个计时器实现了,这个五子棋就完美了,然后就可以用我想的

广义遍历坐标算法尝试实现人工智能了,就是模拟人机对战。但是这个功能不搞定,实在没心情往下写代码了。好了起因就说到这。

              下面给两份源码,一份是基本的,一份是整合JFrame的,不过这个整合和俺的需求不符,所以没用上。

下面是基本类的使用源码:

复制代码
package  com.sy.game.test;

import  java.util.Timer;
import  java.util.TimerTask;

public   class  TimeTask {   
   
    
public   static   void  main(String[] args) { 
        TimeTask tTask
= new  TimeTask();
        tTask.timeVoid();
    }
    
    
public   void  timeVoid(){
        
final  Timer timer  =   new  Timer();
        TimerTask tt
= new  TimerTask() { 
            @Override
            
public   void  run() {
                System.out.println(
" 到点啦! " );
                timer.cancel();
            }
        };
        timer.schedule(tt, 
3000 );
    }
}

复制代码

 

整合的:

复制代码
/*
 * java倒计时器
 * shiyang
 * 
*/

package  com.sy.game.test;

import  java.awt.Container;
import  java.awt.FlowLayout;
import  java.awt.Toolkit;
import  java.awt.event.ActionEvent;
import  java.awt.event.ActionListener;

import  javax.swing.JButton;
import  javax.swing.JFrame;
import  javax.swing.JPanel;
import  javax.swing.JTextField;
import  javax.swing.Timer;

@SuppressWarnings(
" unused " )
public   class  TimeController  extends  JFrame  implements  ActionListener {

    
private   static   final   long  serialVersionUID  =   4603262282860990473L ;

    
private   static   final   int  DEFAULT_WIDTH  =   200 ;
    
private   static   final   int  DEFAULT_HEIGHT  =   100 ;
    
private   static   final   int  width  =  Toolkit.getDefaultToolkit()
            .getScreenSize().width;
    
private   static   final   int  height  =  Toolkit.getDefaultToolkit()
            .getScreenSize().height;
    
private  Container container;
    
private  JButton btn;
    
private  JTextField jtfTime;
    
private  Timer tmr;

    
public  TimeController() {
        initComponents();
        Timer tmr 
=   new  Timer( 1000 this );
        
this .tmr  =  tmr;
        setVisible(
true );
    }

    
private   void  initComponents() {
        
        
this .setTitle( " SY秒表 " );

        
this .setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);
        
        
this .setResizable( false );
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
this .setLocation((width  -  DEFAULT_WIDTH)  /   2 ,
                (height 
-  DEFAULT_HEIGHT)  /   2 );
        
        jtfTime 
=   new  JTextField( " 10 " );

        btn 
=   new  JButton( " 开始倒计时 " );
        
        container 
=  getContentPane();

        JPanel panel 
=   new  JPanel();
        panel.add(btn);
        panel.add(jtfTime);

        
this .add(panel);
        btn.addActionListener(
this );
    }

    
public   void  actionPerformed(ActionEvent ae) {

        
if  (ae.getSource()  ==  btn) {
            jtfTime.setText(
" 10 " );
            tmr.start();
        } 
else  {
            
int  t;
            t 
=  Integer.parseInt(jtfTime.getText());
            t
-- ;
            jtfTime.setText(
""   +  t);

            
if  (t  <=   0 ) {
                tmr.stop();
            }
        }
    }

    
public   static   void  main(String[] args) {
        TimeController timeController 
=   new  TimeController();

    }

}
复制代码

 

都可以直接运行。


本文转自施杨博客园博客,原文链接:http://www.cnblogs.com/shiyangxt/archive/2009/01/25/1380815.html,如需转载请自行联系原作者

相关文章
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
93 7
Java产科专科电子病历系统源码
产科专科电子病历系统,全结构化设计,实现产科专科电子病历与院内HIS、LIS、PACS信息系统、区域妇幼信息平台的三级互联互通,系统由门诊系统、住院系统、数据统计模块三部分组成,它管理了孕妇从怀孕开始到生产结束42天一系列医院保健服务信息。
69 4
[Java计算机毕设]基于ssm的OA办公管理系统的设计与实现,附源码+数据库+论文+开题,包安装调试
OA办公管理系统是一款基于Java和SSM框架开发的B/S架构应用,适用于Windows系统。项目包含管理员、项目管理人员和普通用户三种角色,分别负责系统管理、请假审批、图书借阅等日常办公事务。系统使用Vue、HTML、JavaScript、CSS和LayUI构建前端,后端采用SSM框架,数据库为MySQL,共24张表。提供完整演示视频和详细文档截图,支持远程安装调试,确保顺利运行。
46 17
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
144 2
|
12天前
|
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
当我们创建一个`ThreadPoolExecutor`的时候,你是否会好奇🤔,它到底发生了什么?比如:我传的拒绝策略、线程工厂是啥时候被使用的? 核心线程数是个啥?最大线程数和它又有什么关系?线程池,它是怎么调度,我们传入的线程?...不要着急,小手手点上关注、点赞、收藏。主播马上从源码的角度带你们探索神秘线程池的世界...
81 0
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
智慧产科一体化管理平台源码,基于Java,Vue,ElementUI技术开发,二开快捷
智慧产科一体化管理平台覆盖从备孕到产后42天的全流程管理,构建科室协同、医患沟通及智能设备互联平台。通过移动端扫码建卡、自助报道、智能采集数据等手段优化就诊流程,提升孕妇就诊体验,并实现高危孕产妇五色管理和孕妇学校三位一体化管理,全面提升妇幼健康宣教质量。
47 12
Java智慧工地(源码):数字化管理提升施工安全与质量
随着科技的发展,智慧工地已成为建筑行业转型升级的重要手段。依托智能感知设备和云物互联技术,智慧工地为工程管理带来了革命性的变革,实现了项目管理的简单化、远程化和智能化。
39 5
SaaS云计算技术的智慧工地源码,基于Java+Spring Cloud框架开发
智慧工地源码基于微服务+Java+Spring Cloud +UniApp +MySql架构,利用传感器、监控摄像头、AI、大数据等技术,实现施工现场的实时监测、数据分析与智能决策。平台涵盖人员、车辆、视频监控、施工质量、设备、环境和能耗管理七大维度,提供可视化管理、智能化报警、移动智能办公及分布计算存储等功能,全面提升工地的安全性、效率和质量。
基于Java+SpringBoot+Vue实现的车辆充电桩系统设计与实现(系统源码+文档+部署讲解等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
2495 2
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等