2013-04-28 94 views
5

我的程序中有一個設置選項卡。您可以在此設置的數據不僅可以在此面板中更改。這就是爲什麼我想每5秒重新加載一次數據。我認爲這必須通過一個額外的線程來完成,但我對線程的瞭解很少。我已經有了一個重載方法來達到這個目的。每隔X秒刷新JPanel(帶線程)

我應該用什麼來做到這一點(以及如何...)?

回答

4

使用ScheduledExecutorService

private final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); 
scheduler.scheduleAtFixedRate(yourRunnable, 5, 5, SECONDS); 

然後重新裝入您的JPanelyourRunnable(只需按照從JavaDoc中的示例)。

0

您可以使用Timer定期更新您的數據。

5

但我對主題的知識是最小的...

  1. 你絕對需要了解一般的線程,以及Java Concurrency Tutorial可以提供幫助。
  2. 然後您應該特別瞭解concurrency in Swing
  3. 在您的JPanel的paintComponent(...)方法中繪製GUI的圖形表示,或者更好地在BufferedImage中繪製數據,然後顯示在paintComponent(...)的內部。
  4. 在後臺線程(例如SwingWorker)中重新加載數據。根據syb0rg的回答(1+到syb0rg的回答),該工作人員可以擁有java.util.Timer或ScheduledExecutorService,該回答每5秒請求並獲取新數據。
  5. 然後在您的數據更改後,從Swing事件線程中調用repaint()。如果使用SwingWorker,則過程/發佈方法對可以幫助解決這個問題。你可以用這個將數據發佈到Swing事件線程。
+0

你拼寫錯了我的名字:P + 1的所有有用的東西,我沒有提到。 – syb0rg 2013-04-28 20:04:03

+1

@ syb0rg:哎呀,我的壞! – 2013-04-28 20:04:38

+0

+1用於簡要說明5個步驟。 – 2013-04-28 21:04:21