java关于Timer计时器的问题求解

java关于Timer计时器的问题求解,第1张

timer内部有TimerTask。TimerTask可以取消cancel()。取消了,但是还在timer内部。

timerpurge()移除取消了的任务。

所以 最好 cancel 之后调用 purge 然后 置空timer timer =null;

不调用timercancel(),timerTask线程会一直被执行,

调用timercancel(),timerTask也会执行完当次之后结束。

最好

if(timer!=null){

timercancel();

timerpurge();

timer=null;

}

用Timer类好一些。

--------------------------------------------------------------------------------

import javautilCalendar;

import javautilDate;

import javautilTimer;

import javautilTimerTask;

public class Main {

public static void main(String[] args) {

Calendar taskTime = CalendargetInstance();

taskTimeset(CalendarMONTH, 11);

taskTimeset(CalendarDATE, 31);

taskTimeset(CalendarHOUR, 22);

taskTimeset(CalendarMINUTE, 00);

Calendar now = CalendargetInstance();

if (taskTimeafter(now)) {

// 任务时间在当前时间之后,设置当年 12/31 22:00执行

new Timer()schedule(new MyTask(taskTime), taskTimegetTime());

} else if (taskTimeget(CalendarYEAR) == nowget(CalendarYEAR)) {

// 任务时间在当前时间之前,并且是同一年,执行一次

new Timer()schedule(new MyTask(taskTime), new Date());

} else {

//

taskTimeadd(CalendarYEAR, nowget(CalendarYEAR));

new Timer()schedule(new MyTask(taskTime), taskTimegetTime());

}

}

}

class MyTask extends TimerTask {

private Calendar taskTime = null;

public MyTask(Calendar taskTime) {

thistaskTime = taskTime;

}

public void run() {

// 你要执行的

Systemoutprintln("hello");

// 年+1

taskTimeadd(CalendarYEAR, 1);

new Timer()schedule(new MyTask(taskTime), taskTimegetTime());

}

}

我swing差不多都忘了,你的00控制用DecimalFormat这个类,可以参考JDK中文帮助文档关于它的方法;

DecimalFormat format = new DecimalFormat("00");

String abc ="1";

String a = formatformat(abc)toString();

Systemoutprintln(a);

不用GUI的思路:

实例化一个DecimalFormat的对象f,定义小时分秒为三个字符串变量;

从秒开始,用for循环,循环体是{秒++;if(秒==60){分+=1;秒=0}if(分==60){小时+=1;分=0}if(小时==24){小时=0},Systemoutprint(fformat(小时) + “:”+fformat(分) “:”+fformat (秒));Systemoutprint("\r");这个\r是光标移动到小时第一个数字前面,以至于时间循环覆盖造成原位置变化的效果。ThreadSleep(1000);这个是1秒间隔的设置注意导入Thread类}

这个思路已经完成了代码的90%了,剩下的是你自己根据这个思路边查看JDK边写程序,如果直接给你代码会害了你。用GUI效果就是把Systemoutprint改成类似textsetText();

java代码运行时要消耗多少时间的测量方法:

定义一个起始时间:

long start = SystemcurrentTimeMillis();

//这里是你要执行的程序块。。。。

定义一个结束时间

long end = SystemcurrentTimeMillis();

程序快执行耗时=start-end;

import javaawtColor;

import javautil;

import javaawt;

import javaapplet;

public class Clock extends Applet implements Runnable

{

Thread timer=null;

Label label;

int lastxs=50,lastys=30,lastxm=50,lastym=30,lastxh=50,lastyh=30;

public void init()

{

label=new Label(" ");

setBackground(Colorwhite);

add(label);

}

public void paint(Graphics g)

{

int xh,yh,xm,ym,xs,ys,s,m,h,xcenter,ycenter;

Date rightnow=new Date();

String today=rightnowtoLocaleString();

labelsetText(today);

s=rightnowgetSeconds();

m=rightnowgetMinutes();

h=rightnowgetHours();

xcenter=100;

ycenter=80;

xs=(int)(Mathcos(s314f/30-314f/2)45+xcenter);

ys=(int)(Mathsin(s314f/30-314f/2)45+ycenter);

xm=(int)(Mathcos(m314f/30-314f/2)45+xcenter);

ym=(int)(Mathsin(m314f/30-314f/2)45+ycenter);

xh=(int)(Mathcos((h30+m2)314f/180-314f/2)30+xcenter);

yh=(int)(Mathsin((h30+m2)314f/180-314f/2)30+ycenter);

gsetFont(new Font("TimesToman",FontPLAIN,14));

gsetColor(Colororange);

gfill3DRect(xcenter-50,ycenter-50,100,100,true);

gsetColor(ColordarkGray);

gdrawString("12",xcenter-5,ycenter-37);

gdrawString("3",xcenter+40,ycenter+3);

gdrawString("6",xcenter-3,ycenter+45);

gdrawString("9",xcenter-45,ycenter+3);

gsetColor(Colororange);

if(xs!=lastxs||ys!=lastys)

{

gdrawLine(xcenter,ycenter,lastxs,lastys);

}

if(xm!=lastxm||ym!=lastym)

{

gdrawLine(xcenter,ycenter-1,lastxm,lastym);

gdrawLine(xcenter-1,ycenter,lastxm,lastym);

}

if(xh!=lastxh||yh!=lastyh)

{

gdrawLine(xcenter,ycenter-1,lastxh,lastyh);

gdrawLine(xcenter-1,ycenter,lastxh,lastyh);

}

gsetColor(Colorred);

gdrawLine(xcenter,ycenter,xs,ys);

gdrawLine(xcenter,ycenter-1,xm,ym);

gdrawLine(xcenter-1,ycenter,xm,ym);

gdrawLine(xcenter,ycenter-1,xh,yh);

gdrawLine(xcenter-1,ycenter,xh,yh);

lastxs=xs;

lastys=ys;

lastxm=xm;

lastym=ym;

lastxh=xh;

lastyh=yh;

}

public void start()

{

if(timer==null)

{

timer=new Thread(this);

timerstart();

}

}

public void stop()

{

timer=null;

}

public void run()

{

while(timer!=null)

{

try

{

Threadsleep(1000);

}catch(InterruptedException ie){}

repaint();

}

timer=null;

}

public void update(Graphics g)

{

paint(g);

}

}

以上就是关于java关于Timer计时器的问题求解全部的内容,包括:java关于Timer计时器的问题求解、java 时钟(计时器) 每年年底最后一天(22:00) 执行一次(调用相应的方法)、Java计时器问题 现在程序是从系统当前时间开始计时 我想修改为从00:00:00开始计时 怎么弄呀(其它不变)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10215380.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存