2013-07-19 84 views
0

如何讓系統每5秒自動運行一個方法。因爲這個框架不是焦點,它可以是一個焦點的JDialog,所以這個過程可以被執行? 謝謝!關於線程邏輯的問題

+1

你試過了什麼?爲什麼它沒有工作?當你有一個更具體的問題時,而不是當你想要類似教程的指導時,Stackoverflow最適合你的工作 –

+0

你有什麼困難? –

+0

我不知道系統是否會在框架中運行這個過程?原因我需要該過程繼續完成,因爲用戶使用系統的其他框架。 – Rafael

回答

1

使用搖擺Timer。創建一個,爲它添加一個動作偵聽器,然後啓動它,並定期調用動作偵聽器。例如:

Timer timer = new Timer(500); 
timer.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent event) { 
     // this runs every 500 milliseconds 
    } 
} 
timer.start() 
+0

該定時器對象是否正確地將UI更新發送到EVT? –

+0

不需要。您需要使用'SwingUtilities.invokeLater'。 – tbodt

+3

@tbodt「雖然所有計時器都使用一個共享線程(由執行的第一個Timer對象創建)執行其等待,但是計時器的動作事件處理程序在另一個線程(即事件分派線程)上執行,這意味着動作Timers的處理程序可以安全地對Swing組件執行操作,但這也意味着處理程序必須快速執行以保持GUI的響應。「 (http://docs.oracle.com/javase/7/docs/api/javax/swing/Timer.html) –

0

您可以產生一個新的線程並讓它在循環中休眠5秒鐘。

但是如果你有更復雜的需求,你寧願去一個像Quartz這樣的調度庫(Spring也有一個)。 因爲你不想產生100個線程,所有睡眠5秒,但你寧願有1個調度程序線程觸發多個工作線程。

+0

不可以。添加石英在這樣一個小而集中的任務中沒有意義。計時器在這裏更合適 –

+0

@DavidHofmann這就是爲什麼我說「如果你有更復雜的需求」:) –