在netbeans环境下的JAVA倒计时器怎样做

解决方案 »

  1.   

    http://java.sun.com/j2se/1.4.2/docs/guide/lang/Countdown.java
    import java.util.Timer;
    import java.util.TimerTask;/**
     *Simple countdown timer demo of java.util.Timer facility.
     */public class Countdown {
        public static void main(final String args[]) {
            if (args.length != 1) {
                System.err.println("Usage: java Countdown <time in secs>");
                System.exit(1);
            }
            final Timer timer = new Timer();
            timer.scheduleAtFixedRate(new TimerTask() {
                int i = Integer.parseInt(args[0]);
                public void run() {
                    System.out.println(i--);
                    if (i< 0)
                        timer.cancel();
                }
            }, 0, 1000);
        }
    }
      

  2.   

    把下面的代码存为 TimerTest.java 在操作系统控制台中编译、运行后就是个倒计时了。PS:不能在 NetBeans、Eclipse 等将输出流重定向过的 IDE 中执行。import java.util.Calendar;
    import java.util.concurrent.ScheduledExecutorService;
    import java.util.concurrent.ScheduledThreadPoolExecutor;
    import java.util.concurrent.TimeUnit;public class TimerTest {    public static void main(String[] args) {
            ScheduledExecutorService s = new ScheduledThreadPoolExecutor(1);
            s.scheduleAtFixedRate(new InnerTimerTest(), 0, 1, TimeUnit.SECONDS);
        }    private static class InnerTimerTest implements Runnable {        private final static String BACKSPACES = getBackspaces(80);        public void run() {
                System.out.print(BACKSPACES);    // 输出很多个退格符
                Xmas xmas = Xmas.getXmas();
                System.out.printf("现在是 %tF %<tT 距 %d 年的圣诞节还有 %d 天 %d 时 %d 分 %d 秒",
                        xmas.getCurrent(),
                        xmas.getXmasYear(),
                        xmas.getYearInterval(),
                        xmas.getHourInterval(),
                        xmas.getMinuteInterval(),
                        xmas.getSecondInterval()
                    );
            }        /**
             * 生成多个退格符
             * @param count
             * @return
             */
            private static String getBackspaces(int count) {
                char[] chs = new char[count];
                for(int i = 0; i < count; i++) {
                    chs[i] = '\b';
                }
                return new String(chs);
            }
        }
    }class Xmas {    private final static long SECOND = 1000L;
        private final static long MINUTE = 60L * SECOND;
        private final static long HOUR   = 60L * MINUTE;
        private final static long DAY    = 24L * HOUR;    private int xmasYear;       // 下一个圣诞节的年份
        private long interval;      // 与下一个圣诞节的毫秒数间隔
        private Calendar current;   // 当前时间    private Xmas(int xmasYear, long interval, Calendar current) {
            this.xmasYear = xmasYear;
            this.interval = interval;
            this.current = current;
        }    public static Xmas getXmas() {
            Calendar current = Calendar.getInstance();
            Calendar xmas = getNextXmasCalendar(current);
            int xmasYear = xmas.get(Calendar.YEAR);
            long interval = xmas.getTimeInMillis() - current.getTimeInMillis();
            return new Xmas(xmasYear, interval, current);
        }    /**
         * 获得下一个圣诞节的 Unix 纪元毫秒数
         * @param current
         * @return
         */
        private static Calendar getNextXmasCalendar(Calendar current) {
            Calendar xmas = Calendar.getInstance();
            xmas.set(Calendar.MONTH, Calendar.DECEMBER);
            xmas.set(Calendar.DATE, 25);
            xmas.set(Calendar.HOUR_OF_DAY, 0);
            xmas.set(Calendar.MINUTE, 0);
            xmas.set(Calendar.SECOND, 0);
            xmas.set(Calendar.MILLISECOND, 0);
            if(current.after(xmas)) {
                // 如果当前时间在当前的圣诞节之后,则下一个圣诞节年份加 1
                xmas.add(Calendar.YEAR, 1);
            }
            return xmas;
        }    public int getXmasYear() {
            return xmasYear;
        }
        public long getInterval() {
            return interval;
        }
        public Calendar getCurrent() {
            return current;
        }    public long getYearInterval() {
            return interval / DAY;
        }    public long getHourInterval() {
            return (interval % DAY) / HOUR;
        }    public long getMinuteInterval() {
            return (interval % HOUR) / MINUTE;
        }    public long getSecondInterval() {
            return (interval % MINUTE) / SECOND + (interval > 0 ? 1 : 0);
        }
    }