2011-05-04 74 views
0

我似乎無法讓這個定時器關閉。該程序編譯,並從我的理解,這應ping每隔1000毫秒或1秒,並執行actionPerformed {}函數中的行。java swing定時器不會關閉

public void stringGeneration(String args[]){ 

     ActionListener taskPerformer = new ActionListener() { 
      public void actionPerformed(ActionEvent evt) { 
       String fullIstring = java.lang.String.valueOf(injectString[0] + injectString[1] + injectString[2] + injectString[3] + injectString[4]); 
       jLabel3.setText(fullIstring); 
       System.out.println("output"); 
      } 
     }; 
     Timer timer = new Timer(1000, taskPerformer); 
     timer.setRepeats(true); 
     timer.start(); 

     //Thread.sleep(500); 
     } 
+3

代碼工作對我很好。張貼您的SSCCE(http://sscce.org)來證明問題。也許你的GUI不可見,所以程序在Timer觸發前終止。 – camickr 2011-05-04 21:07:20

+0

我真的不明白如何使用這個SSCCE的東西..圖形用戶界面是可見的,所有其他功能,我一直工作得很好。我在整個文件的主類中都有stringGeneration函數。 – jake 2011-05-04 21:24:38

+2

現在是瞭解SSCCE的好時機。我不關心你的「整個文件」。所有你需要做的就是創建一個顯示JFrame的類,然後啓動一個Timer。它的10行代碼。如果你在這種簡單的情況下無法使你的Timer工作,那麼你將無法使它在更復雜的程序中工作。努力發佈SSCCE。如果你正在調用這個方法,那麼定時器應該工作。問題在你的代碼中的其他地方。這就是爲什麼你創建SSCCE來證明你瞭解使用Timer的基本知識。 – camickr 2011-05-04 21:29:08

回答

0

我只是給你一個例子,而不是東西複製粘貼。但是如果你想嘗試,你可以試試這個。在你的情況下,上面的例子應該是這樣的:

class HeartBeatTask extends TimerTask { 

     private int timerInterval; 

     public HeartBeatTask(int timeInterval) 
     { 
      this.timerInterval = timeInterval; 
     } 

     public void run() 
     { 
      String fullIstring = java.lang.String.valueOf(injectString[0] + injectString[1] + injectString[2] + injectString[3] + injectString[4]); 
         jLabel3.setText(fullIstring); 
         System.out.println("output"); 

     } 

     } 

你的方法,然後調用上面的類是這樣的:

public void stringGeneration(String args[]){ 
    HeartBeatTask tt = new HeartBeatTask(); 
       t1.schedule(tt, 0, 1000 * 60 * 2); 

      } 
+0

我正在給這樣的代碼,因爲您只提供了一種方法。你實際上不需要爲Timer分開類,你現有的類可以擴展TimerTask並覆蓋run方法。 – Shaunak 2011-05-04 21:38:43

+2

這是一個TimerTask。海報試圖讓Swing Timer工作。您不應該更新TimerTask中的Swing組件的狀態。請參閱:http://download.oracle.com/javase/tutorial/uiswing/concurrency/index.html – camickr 2011-05-04 21:55:54

+1

請更新您的以前的答案與此澄清並刪除此答案。有關更多信息,請參閱[faq](http://stackoverflow.com/faq)。 – trashgod 2011-05-04 22:18:55

0

這是我怎麼會在Java計劃任務:

進口java.util.TimerTask中;

類HeartBeatTask擴展的TimerTask {

private int timerInterval; 

public HeartBeatTask(int timeInterval) 
{ 
    this.timerInterval = timeInterval; 
} 

public void run() 
{ 
    // Your function call to schedule here 

} 
public static void main(String[] args) 
    { 
     java.util.Timer t1 = new java.util.Timer(); 

     HeartBeatTask tt = new HeartBeatTask(); 
     t1.schedule(tt, 0, 1000 * 60 * 2); 
     } 

} 

希望幫助

+0

1000 * 60 * 2 = 2分鐘:)忘記提及:)但您可以隨時查看文檔:P – Shaunak 2011-05-04 21:03:14

+1

這是一個Swing相關問題,使用Swing時需要使用Swing計時器不是一個AWT定時器 – camickr 2011-05-04 21:09:33

+0

謝謝,但仍然無法正常工作,除了我必須將public static void main改爲public void main。 – jake 2011-05-04 21:14:55