How to handle Timers correctly in Java?

前端 未结 5 404
情书的邮戳
情书的邮戳 2021-01-21 01:13

I want my timer to execute the actionPerformed method only one time once it 5 seconds the time but it is writing in the console \"Hello\" lots of times:

import j         


        
相关标签:
5条回答
  • 2021-01-21 01:37
    class MyTask extends TimerTask {
        public void run() {
          System.out.println("Hello");
    
        }
      }
    

    and then

    timer = new Timer();
    timer.schedule(new MyTask(), 5000);
    
    0 讨论(0)
  • 2021-01-21 01:40

    As already mentioned, it's better to use java.util.Timer, but you can also use setRepeats() before starting:

    timer.setRepeats(false);
    
    0 讨论(0)
  • 2021-01-21 01:41

    Don't neglect to use the event dispatch thread. There's nothing wrong with java.util.Timer, but javax.swing.Timer has several advantages with Swing.

    import java.awt.EventQueue;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    
    import javax.swing.Timer;
    
    public class X {
    
        public static void main(String args[]) {
            EventQueue.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    ActionListener actionListener = new ActionListener() {
    
                        public void actionPerformed(ActionEvent actionEvent) {
                            System.out.println("Hello");
                        }
                    };
                    Timer timer = new Timer(5000, actionListener);
                    timer.start();
                }
            });
        }
    }
    

    If using java.util.Timer, update the GUI using a continuation.

    0 讨论(0)
  • 2021-01-21 01:48

    This should do the trick!

    new JFrame().setVisible(true);
    
    0 讨论(0)
  • 2021-01-21 01:57

    Sounds like you want a java.util.Timer rather than a javax.swing.Timer.

    0 讨论(0)
提交回复
热议问题