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,如需转载请自行联系原作者

相关文章
|
20天前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
57 7
|
1月前
|
数据采集 人工智能 Java
Java产科专科电子病历系统源码
产科专科电子病历系统,全结构化设计,实现产科专科电子病历与院内HIS、LIS、PACS信息系统、区域妇幼信息平台的三级互联互通,系统由门诊系统、住院系统、数据统计模块三部分组成,它管理了孕妇从怀孕开始到生产结束42天一系列医院保健服务信息。
31 4
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
76 2
|
2月前
|
Java Apache Maven
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
文章提供了使用Apache POI库在Java中创建和读取Excel文件的详细代码示例,包括写入数据到Excel和从Excel读取数据的方法。
65 6
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
|
3月前
|
数据采集 运维 前端开发
【Java】全套云HIS源码包含EMR、LIS (医院信息化建设)
系统技术特点:采用前后端分离架构,前端由Angular、JavaScript开发;后端使用Java语言开发。
123 5
|
2天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
12天前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
72 13
|
26天前
|
缓存 监控 Java
Java线程池提交任务流程底层源码与源码解析
【11月更文挑战第30天】嘿,各位技术爱好者们,今天咱们来聊聊Java线程池提交任务的底层源码与源码解析。作为一个资深的Java开发者,我相信你一定对线程池并不陌生。线程池作为并发编程中的一大利器,其重要性不言而喻。今天,我将以对话的方式,带你一步步深入线程池的奥秘,从概述到功能点,再到背景和业务点,最后到底层原理和示例,让你对线程池有一个全新的认识。
53 12
|
20天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
1月前
|
人工智能 监控 数据可视化
Java智慧工地信息管理平台源码 智慧工地信息化解决方案SaaS源码 支持二次开发
智慧工地系统是依托物联网、互联网、AI、可视化建立的大数据管理平台,是一种全新的管理模式,能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。围绕施工现场管理的人、机、料、法、环五大维度,以及施工过程管理的进度、质量、安全三大体系为基础应用,实现全面高效的工程管理需求,满足工地多角色、多视角的有效监管,实现工程建设管理的降本增效,为监管平台提供数据支撑。
43 3