解决方案 »

  1.   

    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;import java.time.*;public class CountDownTimerExample {
        public static void main(String[] args) {
            java.awt.EventQueue.invokeLater(new Runnable(){
                    @Override public void run(){
                        final JFrame frame = new JFrame("CountDownTimerExample");                    final JLabel message = new JLabel("");
                        frame.add(message);
                        final JButton start = new JButton("Start");                    final Timer timer = new Timer(100, new ActionListener(){
                            Duration d = Duration.ofSeconds(5);
                            @Override public void actionPerformed(ActionEvent e){
                                if(d.isNegative()) return;
                                message.setText(d.toString().substring(2));
                                d = d.minusMillis(100);
                            }
                        });
                        start.addActionListener(new ActionListener(){
                            @Override public void actionPerformed(ActionEvent e){
                                timer.start();
                            }
                        });
                        frame.add(start, BorderLayout.PAGE_END);
                        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                        frame.setPreferredSize(new Dimension(300,200));
                        frame.pack();
                        frame.setVisible(true);                }
                });
        }
    }
    Java8编译运行
      

  2.   

    jdk6 编译, swing界面,开始,暂停,继续按钮。
    写的不好,仅供参考import java.awt.BorderLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.SwingConstants;
    import javax.swing.SwingUtilities;public class CountDownDemo extends JFrame {
        private final String COUNT = "10.0";
        private final String START = "start";
        private final String PAUSE = "pause";
        private final String RESUME = "resume";
        
        private JLabel jlblCountDown;
        private JButton jbtnStart;
        private JButton jbtnPause;
        
        private ActionListener listener = new ActionListener() {
            boolean available = true; // 倒计时是否工作
            boolean isRunning = false; // 线程是否在运行
            Thread t = null;
            @Override
            public void actionPerformed(ActionEvent e) {
                Object source = e.getSource();
                if(t == null){
                    t = new Thread(new Runnable() {
                        
                        @Override
                        public void run() {
                            float i = Float.parseFloat(COUNT);
                            while(i > 0){
                                if(available){
                                    try {
                                        Thread.sleep(100);
                                    } catch (InterruptedException e) {
                                        e.printStackTrace();
                                    }
                                    i -= 0.1f;
                                    jlblCountDown.setText(String.format("%.1f", i<0?0:i));
                                }
                            }
                            isRunning = false;
                            t = null;
                        }
                    });
                }
                if(source == jbtnStart){
                    if(!isRunning){
                        isRunning = true;
                        t.start();
                    }
                }
                else if(source == jbtnPause){
                    if(PAUSE.equals(jbtnPause.getText())){
                        jbtnPause.setText(RESUME);
                        available = false;
                    }
                    else{
                        available = true;
                        jbtnPause.setText(PAUSE);
                    }
                }
            }
        };
        
        private void initUI(){
            jlblCountDown = new JLabel(COUNT, SwingConstants.CENTER);
            jbtnStart = new JButton(START);
            jbtnPause = new JButton(PAUSE);
            
            JPanel panel = new JPanel();
            panel.add(jbtnStart);
            panel.add(jbtnPause);
            add(jlblCountDown, BorderLayout.CENTER);
            add(panel, BorderLayout.SOUTH);
            
            jbtnStart.addActionListener(listener);
            jbtnPause.addActionListener(listener);
        }
        
        public CountDownDemo(){
            initUI();
            setSize(300, 300);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
        
        
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable() {
                
                @Override
                public void run() {
                    CountDownDemo demo = new CountDownDemo();
                    demo.setVisible(true);
                }
            });
        }
    }