import java.awt.BorderLayout;import java.awt.Container;import java.awt.Font;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;public class TimerDemo extends JFrame implements ActionListener { private static final long serialVersionUID = 201306211111L; private JTextField screen = new JTextField("0"); private JButton start = new JButton("開始"); private JButton reset = new JButton("重置"); private JPanel panel = new JPanel(); private boolean isRunning; private int time; private int timeBetween; public TimerDemo(int timeBetween) { super("計(jì)時(shí)器"); this.timeBetween = timeBetween; try { init(); } catch (Exception e) { e.printStackTrace(); } } public TimerDemo() { super("計(jì)時(shí)器"); this.timeBetween = 100; try { init(); } catch (Exception e) { e.printStackTrace(); } } private void init() { panel.setLayout(new GridLayout()); panel.add(start); panel.add(reset); start.addActionListener(this); reset.addActionListener(this); screen.setFont(new Font("幼圓", Font.BOLD, 60)); screen.setHorizontalAlignment(JTextField.CENTER); screen.setEditable(false); Container c = getContentPane(); c.setLayout(new BorderLayout()); c.add(panel, BorderLayout.SOUTH); c.add(screen, BorderLayout.CENTER); this.setSize(200, 150); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setResizable(false); this.setLocationRelativeTo(null); this.setVisible(true); } public static void main(String[] args) { new TimerDemo(1);// 設(shè)定 1ms/次 // new TimerDemo(); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == start) { if (start.getText().equals("開始")) { start.setText("暫停"); isRunning = true; } else if (start.getText().equals("暫停")) { start.setText("開始"); isRunning = false; } } if (e.getSource() == reset) { start.setText("開始"); screen.setText("0"); isRunning = false; time = 0; } new Thread(new TimeZone()).start(); } class TimeZone implements Runnable { @Override public void run() { while (isRunning) { time++; if (time = Integer.MAX_VALUE) { screen.setText("ERROR"); JOptionPane.showMessageDialog(null, "ERROR"); isRunning = false; } screen.setText(String.valueOf(time)); try { Thread.sleep(timeBetween); } catch (Exception e) { e.printStackTrace(); } } } }}
專業(yè)領(lǐng)域包括網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、電子商務(wù)商城網(wǎng)站建設(shè)、微信營銷、系統(tǒng)平臺(tái)開發(fā), 與其他網(wǎng)站設(shè)計(jì)及系統(tǒng)開發(fā)公司不同,成都創(chuàng)新互聯(lián)公司的整合解決方案結(jié)合了幫做網(wǎng)絡(luò)品牌建設(shè)經(jīng)驗(yàn)和互聯(lián)網(wǎng)整合營銷的理念,并將策略和執(zhí)行緊密結(jié)合,為客戶提供全網(wǎng)互聯(lián)網(wǎng)整合方案。
基于控制臺(tái)的話很簡單的,我跟你說一下大體思路吧,二話不說先來個(gè)for循環(huán),然后輸出倒計(jì)時(shí)的數(shù)字,程序睡一秒,在輸出倒計(jì)時(shí)數(shù)字,如此循環(huán),簡單吧,下面看程序:
public static void main(String[] args) {
for(int i=10;i0;i--){
System.out.print(i+" ");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.err.print("爆炸");
}
其他基于網(wǎng)頁的還是基于用戶界面都可以使用這個(gè)思路的
給你一個(gè)javascript 5秒 倒計(jì)時(shí)的例子。
title無標(biāo)題文檔/title
script type="text/javascript"
var totalTime=parseInt(6);
function countDown(){
if(totalTime==0){
return;
}else{
totalTime=totalTime-1;
window.document.form1.timeText.value=totalTime;
setTimeout("countDown()",1000);
}
}
/script
/head
body
form name="form1"
input type="text" name="timeText" /
input type="button" value="start" onclick="countDown();"
/form
/body
/html
如果用java實(shí)現(xiàn)web 倒計(jì)時(shí),那么就一種后果,不斷的刷新頁面。除非用ajax 或者 javascript 還有一個(gè)就是 applet。 有啥問題可以hi我交流
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;//表示時(shí)針,分針和秒針的線程
int hour_a,hour_b,minute_a,minute_b,second_a,second_b;//表示時(shí)針,分針,秒針端點(diǎn)的整型變量
int hour = 0,minute = 0,second = 0;//獲取當(dāng)前時(shí)間的整型變量
//繪制時(shí)針,分針和秒針的Graphics對(duì)象
Graphics g_second = null,g_minute = null,g_hour =null;
//存放表盤刻度的數(shù)組,供指針走動(dòng)時(shí)使用
double point_x[] = new double[61],point_y[] = new double[61];
//存放表盤刻度的數(shù)組,供繪制表盤使用
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);//進(jìn)行坐標(biāo)系統(tǒng)變換,將新坐標(biāo)系原點(diǎn)設(shè)在(200,200)處
g_minute.translate(200,200);
g_hour.translate(200,200);
point_x[0] = 0; point_y[0] = -120;//各個(gè)時(shí)針12點(diǎn)處的位置坐標(biāo)(按新坐標(biāo)系的坐標(biāo))
scaled_x[0] = 0;scaled_y[0] = -140;//12點(diǎn)處的刻度位置坐標(biāo)(按新坐標(biāo)系的坐標(biāo))
double jiaodu = 6*Math.PI/180;
//表盤分割成60分,將分割點(diǎn)的坐標(biāo)存放在數(shù)組中
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(){
//每當(dāng)小程序重新開始時(shí),首先消滅線程,然后重新開始創(chuàng)建線程
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(){
//獲取本地時(shí)間
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);//用背景色清除前一秒時(shí)的秒針
g_second.drawString("秒",second_a,second_b);
//如果秒針與分針重合,恢復(fù)分針的顯示
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);
}
//如果秒針與時(shí)針重合,恢復(fù)時(shí)針的顯示
if((second_a == hour_a)(second_b == hour_b)){
g_hour.drawLine(0,0,hour_a,hour_b);
g_hour.drawString("時(shí)",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;
}
//秒針向前走一個(gè)單位
second_a=(int)point_x[(i+1)%60];
second_b = (int)point_y[(i+1)%60]; //每一秒走6度(一個(gè)單位格)
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秒就前進(jìn)一分鐘,以后每過60秒前進(jìn)一分鐘
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("時(shí)",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("時(shí)",hour_a,hour_b);
while(true){
//第一次過12-minute%12分鐘就前進(jìn)一個(gè)刻度,以后每過12分鐘前進(jìn)一個(gè)刻度
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("時(shí)",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("時(shí)",hour_a,hour_b);
i++;minute = 0;
}
}
}
}