java - Swing - 计时器不按时间间隔触发事件

标签 java swing events timer actionlistener

我正在编写一个程序,暂时每半秒打印一次Printing...。这是我的代码:

package mainPackage;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Timer;

public class Ticker {

    public static void tick() {
        System.out.println("Printing...");
    }

    public static void main(String args[]) {

        ActionListener timerListener = new ActionListener(){

            @Override
            public void actionPerformed(ActionEvent e) 
            {
                tick();
            }
        };

        Timer mainTimer = new Timer(500,timerListener);
        mainTimer.start();
    }
}

根据我的理解,mainTimer 对象应该每 500 毫秒触发一次由 timerListener 处理的事件。当我执行这段代码时没有任何反应,我是否遗漏了一些明显的东西?

最佳答案

在 Swing 下使用 Swing 定时器event dispatch thread :

public static void main(String args[]) {

    ActionListener timerListener = new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e) {
            tick();
        }
    };

    SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            Timer mainTimer = new Timer(500,timerListener);
            mainTimer.start();
        }
    });
}

如果您不打算从计时器更改 GUI,请考虑使用 java.util.Timer

关于java - Swing - 计时器不按时间间隔触发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47376073/

相关文章:

java - Eclipse 启动时退出代码 = 13

java - 如何在 OpenCV Python 中读取 Minoru 3d 网络摄像头的视频?

java - 计算 BST 中的节点数

java - Android VMD MySQL 插入和显示对话框

java - JLabel滚动后消失

javascript/jQuery 在事件完成并返回后调用函数

java - 有没有办法以不锁定 Swing 线程的方式调用 JXTable.packAll() ?

java - Java 中 JTable 的 JDBC TableModel?

android - onKeyDown 并不总是在 Android 应用程序中调用

php - kernel.request 事件 setResponse 到 RedirectResponse 不工作