Java 计时器类不工作

Java 计时器类不工作,java,debugging,timer,Java,Debugging,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.im

我正在学习定时器课程

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秒后不执行,而从不执行???

试试线程睡眠(10000)在程式结束时。我认为程序在计时器启动之前就已经退出了……

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

程序的问题是

程序在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处理线程共享
  • 您需要实现java.awt.event.ActionListener接口,并在其actionPerformed方法中编写任务代码

最好使用
java.util.Timer
有更多的功能请参见

您需要一个程序框架。不是真的,但当然扩展JPanel会建议他(最终)需要一些图形元素。对于Swing Timer,是的,您需要一个。好的,我没有注意它是java.util.Timer还是swing Timer如果他在计时器上有5秒的延迟。谢谢,很明显,我很久以前没有退出我自己的睡眠方法。更正。