定时器类不工作

时间:2014-04-25 10:55:37

标签: java debugging timer

我学习了Timer类

package testing;

import java.io.*;
import java.security.*;
import javax.xml.bind.DatatypeConverter;
import java.lang.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;


public class Testing extends JPanel 
{



    public static void main(String[] args) 
    {
        Timer timer = new Timer(5000, new ActionListener() 
        {
            @Override
            public void actionPerformed(ActionEvent arg0) 
            {
                // Output function
                System.out.println("HowareYou"); // function to be run after 5 seconds

            }
        });
        timer.setRepeats(false); // Only execute once
        timer.start(); // Go go go!

    }


}

为什么输出函数在程序启动后5秒内没有执行,而是从不执行???

3 个答案:

答案 0 :(得分:1)

在程序结束时尝试Thread.sleep(10000);。我认为程序在计时器启动之前就已退出......

答案 1 :(得分:1)

Swing Timer需要Swing应用程序来激活计时器。将计时器代码本身移动到类的实例方法中并添加it to a JFrame

答案 2 :(得分:0)

您的计划存在问题

程序在timer.start()之后很快结束(JVM退出);所以你的计时器没有机会运行。 您可以使用Thread.sleep(5000)暂停主线程;启动计时器后不久,让它有机会在主要退出之前运行。

  • javax.swing.Timer类只能在Swing应用程序中使用。
  • javax.swing.Timer不如java.util.Timer
  • 强大 对于Swing应用程序,
  • javax.swing.Timer比java.util.Timer更合适,因为javax.swing.Timer handles thread sharing
  • 您需要实现java.awt.event.ActionListener接口并在其actionPerformed方法中编写任务代码

最好使用java.util.Timer有更多功能,请参阅here