代码之家  ›  专栏  ›  技术社区  ›  Psear

Swing-定时器未在区间触发事件

  •  1
  • Psear  · 技术社区  · 7 年前

    我正在制作一个程序,暂时只打印 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 对象应触发由处理的事件 timerListener

    1 回复  |  直到 7 年前
        1
  •  1
  •   c0der    7 年前

    在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