为什么java swing定时器类不工作?

为什么java swing定时器类不工作?,java,multithreading,swing,timer,actionlistener,Java,Multithreading,Swing,Timer,Actionlistener,这是我的主课 import javax.swing.Timer; public class Test { public static int k=9; public static void main(String[] args) { Timer t = new Timer(100, new Loop()); t.start(); } } 还有我的类循环,它实现了ActionListener import java.

这是我的主课

import javax.swing.Timer;

public class Test {
    public static int k=9;
    public static void main(String[] args) {
        
        Timer t = new Timer(100, new Loop());
        t.start();
    }  
}
还有我的类循环,它实现了ActionListener

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Loop implements ActionListener {    
    @Override
    public void actionPerformed(ActionEvent e) {
       if(Test.k==9){
           System.out.println("Its's Working");
       } 
    }
    
}
我不知道为什么?当我完全知道它需要什么,但它没有在控制台中打印“它正在工作”时

还有一个问题是“这个计时器类类似于java中的线程吗?”


谢谢你的回答

您的程序在启动计时器后立即退出,使其没有机会启动

出于某种原因,AWT事件调度线程(EDT)需要启动,计时器才能保持活动状态

Swing应该是从这个线程使用的。如果你这样做,它应该会起作用

    java.awt.EventQueue.invokeLater(() -> {     
        Timer t = new Timer(100, new Loop());
        t.start();
    });
为了避免缩进大量代码,并且有一个简短的
main
,我倾向于创建一个方法调用
go
,并使用一个方法引用

java.awt.EventQueue.invokeLater(Test::go);

private static void go() {

如果要激活JFrame类的t.sart(),我应该怎么做?