java什么是倒计时,java启用一个倒计时任务
这篇文章给大家聊聊关于java什么是倒计时,以及java启用一个倒计时任务对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。
谁有用java的application编写的倒计时钟代码
package hello;
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.util.*;
import java.awt.geom.*;
public class T extends Applet implements Runnable{
Thread tHour= null,tMinute= null,tSecond= null;//表示时针,分针和秒针的线程
int hour_a,hour_b,minute_a,minute_b,second_a,second_b;//表示时针,分针,秒针端点的整型变量
int hour= 0,minute= 0,second= 0;//获取当前时间的整型变量
//绘制时针,分针和秒针的Graphics对象
Graphics g_second= null,g_minute= null,g_hour=null;
//存放表盘刻度的数组,供指针走动时使用
double point_x[]= new double[61],point_y[]= new double[61];
//存放表盘刻度的数组,供绘制表盘使用
double scaled_x[]= new double[61],scaled_y[]= new double[61];
//判断小程序是否重新开始的变量
int start_count= 0;
public void init(){
g_hour= this.getGraphics();
g_hour.setColor(Color.CYAN);
g_second= this.getGraphics();
g_second.setColor(Color.RED);
g_minute= this.getGraphics();
g_minute.setColor(Color.blue);
g_second.translate(200,200);//进行坐标系统变换,将新坐标系原点设在(200,200)处
g_minute.translate(200,200);
g_hour.translate(200,200);
point_x[0]= 0; point_y[0]=-120;//各个时针12点处的位置坐标(按新坐标系的坐标)
scaled_x[0]= 0;scaled_y[0]=-140;//12点处的刻度位置坐标(按新坐标系的坐标)
double jiaodu= 6*Math.PI/180;
//表盘分割成60分,将分割点的坐标存放在数组中
for(int i= 0; i< 60; i++){
point_x[i+1]= point_x[i]*Math.cos(jiaodu)-Math.sin(jiaodu)*point_y[i];
point_y[i+1]= point_y[i]*Math.cos(jiaodu)+ point_x[i]*Math.sin(jiaodu);
}
point_x[60]= 0; point_y[60]=-120;
for(int i= 0; i< 60; i++){
scaled_x[i+1]= scaled_x[i]*Math.cos(jiaodu)-Math.sin(jiaodu)*scaled_y[i];
scaled_y[i+1]= scaled_y[i]*Math.cos(jiaodu)+ Math.sin(jiaodu)*scaled_x[i];
}
scaled_x[60]= 0;
scaled_y[60]=-140;
}
public void start(){
//每当小程序重新开始时,首先消灭线程,然后重新开始创建线程
if(start_count>= 1){
tSecond.interrupt();
tMinute.interrupt();
tHour.interrupt();
}
tSecond= new Thread(this);
tMinute= new Thread(this);
tHour= new Thread(this);
tSecond.start();
tMinute.start();
tHour.start();
start_count++;
if(start_count>= 2) start_count= 1;
}
public void stop()
{
tSecond.interrupt();
tMinute.interrupt();
tHour.interrupt();
}
public void paint(Graphics g){
this.start();
g.drawOval(50,50,300,300);//表盘的外圈
g.translate(200,200);
//绘制表盘的小刻度和大刻度
for(int i= 0; i< 60; i++){
if(i%5== 0){
g.setColor(Color.BLACK);
g.fillOval((int) scaled_x[i],(int) scaled_y[i],10,10);
}
else
g.fillOval((int)scaled_x[i],(int)scaled_y[i],5,5);
}
}
public void run(){
//获取本地时间
Date date= new Date();
String s=date.toString();
hour=Integer.parseInt(s.substring(11,13));
minute= Integer.parseInt(s.substring(14,16));
second= Integer.parseInt(s.substring(17,19));
if(Thread.currentThread()== tSecond){
second_a=(int)point_x[second];
second_b=(int)point_x[second];
g_second.drawLine(0,0,second_a,second_b);//秒针的初始位置
g_second.drawString("秒",second_a,second_b);
int i= second;
while(true){
try{
tSecond.sleep(1000);
Color c= getBackground();
g_second.setColor(c);
g_second.drawLine(0,0,second_a,second_b);//用背景色清除前一秒时的秒针
g_second.drawString("秒",second_a,second_b);
//如果秒针与分针重合,恢复分针的显示
if((second_a== minute_a)&&(second_b== minute_b)){
g_minute.drawLine(0,0,minute_a,minute_b);
g_minute.drawString("分",minute_a,minute_b);
}
//如果秒针与时针重合,恢复时针的显示
if((second_a== hour_a)&&(second_b== hour_b)){
g_hour.drawLine(0,0,hour_a,hour_b);
g_hour.drawString("时",hour_a,hour_b);
}
}
catch(InterruptedException e){
Color c= getBackground();
g_second.setColor(c);
g_second.drawLine(0,0,second_a,second_b);//用背景色清除秒针
g_second.drawString("秒",second_a,second_b);
return;
}
//秒针向前走一个单位
second_a=(int)point_x[(i+1)%60];
second_b=(int)point_y[(i+1)%60];//每一秒走6度(一个单位格)
g_second.setColor(Color.red);
g_second.drawLine(0,0,second_a,second_b);
g_second.drawString("秒",second_a,second_b);
i++;
}
}
if(Thread.currentThread()== tMinute){
minute_a=(int)point_x[minute];
minute_b=(int)point_y[minute];
g_minute.drawLine(0,0,minute_a,minute_b);
int i= minute;
while(true){
//第一次过60-second秒就前进一分钟,以后每过60秒前进一分钟
try{
tMinute.sleep(1000*60- second*1000);
second= 0;
Color c= getBackground();
g_minute.setColor(c);
g_minute.drawLine(0,0,minute_a,minute_b);
g_minute.drawString("分",minute_a,minute_b);
if((hour_a== minute_a)&&(hour_b== minute_b)){
g_hour.drawLine(0,0,minute_a,minute_b);
g_hour.drawString("时",hour_a,hour_b);
}
}
catch(InterruptedException e){
return;
}
minute_a=(int)point_x[(i+1)%60];
minute_b=(int)point_y[(i+1)%60];
g_minute.setColor(Color.BLUE);
g_minute.drawLine(0,0,minute_a,minute_b);
g_minute.drawString("分",minute_a,minute_b);
i++; second= 0;
}
}
if(Thread.currentThread()== tHour){
int h= hour%12;
hour_a=(int)point_x[h*5+ minute/12];
hour_b=(int)point_y[h*5+ minute/12];
int i= h*5+ minute/12;
g_hour.drawLine(0,0,hour_a,hour_b);
g_hour.drawString("时",hour_a,hour_b);
while(true){
//第一次过12-minute%12分钟就前进一个刻度,以后每过12分钟前进一个刻度
try{
tHour.sleep(1000*60*12- 1000*60*(minute%12)- second*1000);
minute= 0;
Color c= getBackground();
g_hour.setColor(c);
g_hour.drawLine(0,0,hour_a,hour_b);
g_hour.drawString("时",hour_a,hour_b);
}
catch(InterruptedException e){
return;
}
hour_a=(int)point_x[(i+1)%60];
hour_b=(int)point_y[(i+1)%60];
g_hour.setColor(Color.CYAN);
g_hour.drawLine(0,0,hour_a,hour_b);
g_hour.drawString("时",hour_a,hour_b);
i++;minute= 0;
}
}
}
}
如何在java设计的程序中加入一个倒计时功能
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class TimeThreadFrame extends JFrame{
//定义组件
private JLabel lblTime;
private JTextField txtInput;
private JButton btnEnter;
//构造方法
public TimeThreadFrame(){
//设置窗体的相关属性
super("TimerThread");
this.setSize(300,200);
this.setLayout(null);
this.setLocation(100,50);
//创建组件
this.lblTime= new JLabel("请输入倒计时时间");
this.lblTime.setBounds(30,20,200,30);
this.txtInput= new JTextField();
this.txtInput.setBounds(30,70,100,30);
this.btnEnter= new JButton("确定");
this.btnEnter.setBounds(150,70,70,30);
//给JTextField注册监听
this.txtInput.addKeyListener(new KeyListener(){
public void keyPressed(KeyEvent ke){
}
public void keyReleased(KeyEvent ke){
}
public void keyTyped(KeyEvent ke){
txtInput_KeyTyped(ke);
}
});
//给JButton注册监听
this.btnEnter.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
btnEnter_ActionPerformed(ae);
}
});
//将各组件添加到窗体上
add(lblTime);
add(txtInput);
add(btnEnter);
//显示窗体
this.setVisible(true);
}
//输入时的事件处理,控制用户只能输入数字
public void txtInput_KeyTyped(KeyEvent ke){
if(ke.getKeyChar()<'0'|| ke.getKeyChar()>'9'){
ke.setKeyChar('\0');
}
}
//点击按钮时的事件处理,核心!
public void btnEnter_ActionPerformed(ActionEvent ae){
//获得用户输入的倒计时时间
String strTime= this.txtInput.getText();
if(strTime.equals("")){
//检测用户是否输入
this.lblTime.setText("您尚未输入,请输入!");
}
else{
Integer time= Integer.parseInt(strTime);
//创建线程
TimeThread tt= new TimeThread(this.lblTime,time);
tt.start();
//创建Timer
Timer timer= new Timer();
timer.schedule(new TimerTask(){
//启动其他程序
public void run(){
System.out.print("ok");
}
}, time* 1000);
}
}
//启动窗体
public static void main(String[] args){
new TimeThreadFrame();
}
}
//时间线程类
class TimeThread extends Thread{
private JLabel lblTime;
private int time;
//构造方法传入,显示事件的JLabel和倒计时的时间。
public TimeThread(JLabel lblTime, int time){
this.lblTime= lblTime;
this.time= time;
}
// run方法
public void run(){
while(time> 0){
//显示所剩时间
this.lblTime.setText("所剩时间:"+ time);
//所剩时间减少
time--;
try{
this.sleep(1000);
} catch(InterruptedException e){
e.printStackTrace();
}
}
}
}
java启用一个倒计时任务
你看一下这个吧.用线程来检查超时时间.
----------------------------------------------------------------------
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JButton;
import javax.swing.SwingConstants;
public class DemoApp extends JFrame implements ActionListener, Runnable{
private JTextField textField;
private int seconds= 0;
//默认超时时间是10秒
private int time= 10;
private JLabel showTime;
private JButton btnStart;
public DemoApp(){
getContentPane().setLayout(null);
JLabel label= new JLabel("设置时间");
label.setBounds(10, 10, 64, 15);
getContentPane().add(label);
textField= new JTextField();
textField.setBounds(84, 7, 35, 21);
getContentPane().add(textField);
textField.setColumns(10);
JLabel label_1= new JLabel("秒");
label_1.setBounds(129, 10, 25, 15);
getContentPane().add(label_1);
btnStart= new JButton("开始");
btnStart.setBounds(164, 6, 64, 23);
btnStart.addActionListener(this);
btnStart.setActionCommand("S");
getContentPane().add(btnStart);
JLabel label_2= new JLabel("计时");
label_2.setBounds(10, 38, 54, 15);
getContentPane().add(label_2);
showTime= new JLabel("0");
showTime.setHorizontalAlignment(SwingConstants.RIGHT);
showTime.setBounds(84, 38, 35, 15);
getContentPane().add(showTime);
JButton button= new JButton("模拟使用连接");
button.setBounds(168, 39, 116, 23);
button.addActionListener(this);
button.setActionCommand("M");
getContentPane().add(button);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setSize(300, 150);
setLocationRelativeTo(null);
setVisible(true);
}
public static void main(String[] args){
new DemoApp();
}
public void actionPerformed(ActionEvent e){
if("S".equals(e.getActionCommand())){
try{
time= Integer.parseInt(textField.getText());
} catch(Exception ex){
}
new Thread(this).start();
//按钮不可用。
btnStart.setEnabled(false);
textField.setEditable(false);
}
if("M".equals(e.getActionCommand())){
seconds= 0;
}
}
public void run(){
while(true){
try{
showTime.setText(""+ seconds);
//检查是否超时
if(seconds== time){
//超时后可重新设置时间
btnStart.setEnabled(true);
textField.setEditable(true);
break;
}
seconds++;
//休眠时间设为一秒,如果总的超时时间很长的话,可以多设置一些
//比如30秒超时,可以设置为5秒一检查
Thread.sleep(1000);
} catch(Exception e){
}
}
}
}
关于java什么是倒计时的内容到此结束,希望对大家有所帮助。