2014-06-08 27 views
0

我希望有人可以幫助我解決與計時器有關的問題。當timer.start()運行時,定時器啓動。然而,它似乎無止境地重複着。Java中的計時器問題 - 設置setRepeat(false)時不會停止

我只需要定時器執行一次。如果timer.setRepeats(false)不起作用,我該如何實現這一點?

 ActionListener updatePane = new ActionListener() { 

    public void actionPerformed(ActionEvent ae) { 

    try { 
      msgPaneDoc.insertString(msgPaneDoc.getLength(), "CLICK", 
        msgPaneDoc.getStyle("bold_style")); 
     } catch (BadLocationException ex) {  
      }}}; 

     Timer timer = new Timer(3000,updatePane); 

     timer.start(); 
     timer.setRepeats(false); 

回答

1

您可以從The Event Dispatch Thread中調用它。

嘗試使用SwingUtilities.invokeLater()EventQueue.invokeLater()

樣品的編號:

SwingUtilities.invokeLater(new Runnable() { 

    @Override 
    public void run() { 
     ActionListener actionListener = new ActionListener() { 

      public void actionPerformed(ActionEvent ae) { 
       System.out.println("Hello"); 
      } 
     }; 
     Timer timer = new Timer(1000, actionListener); 
     timer.start(); 
     timer.setRepeats(false); 
    } 
}); 
+0

這仍然產生連續重複計時器。我知道這一點,因爲當插入到「msgPaneDoc」中時會重複「CLICK」字符串 – user3633639

+0

請嘗試使用我共享給您的示例代碼,該代碼一次性打印「Hello」。 – Braj

+0

這是相同的結果 – user3633639