2013-04-28 16 views
5

Mam kartę ustawień w moim programie. Dane, które można tam ustawić, można zmieniać nie tylko za pomocą tego panelu. Dlatego chcę przeładowywać te dane co 5 sekund. Myślę, że należy to zrobić z dodatkowym wątkiem, ale moja wiedza na temat tematów jest minimalna. W tym celu mam już metodę przeładowania.Załaduj ponownie JPanel co X sekund (z wątkami?)

Co powinienem użyć, aby to zrobić (i jak ...)?

Odpowiedz

4

Użyj ScheduledExecutorService:

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

Następnie przeładować JPanel w yourRunnable (tylko naśladować przykład od Javadocs).

0

Możesz użyć Timer, aby okresowo aktualizować swoje dane.

5

ale moja wiedza o Nici jest minimalne ...

  1. Koniecznie trzeba dowiedzieć się o wątków w ogóle, a Java Concurrency Tutorial może pomóc.
  2. W takim razie powinieneś się w szczególności dowiedzieć o concurrency in Swing.
  3. Narysuj graficzną reprezentację danych GUI w swojej metodzie JPanel paintComponent(...), a może lepiej, w zbuforowanym obrazie, który jest następnie wyświetlany wewnątrz paintComponent(...).
  4. Załaduj ponownie dane w wątku tła, takim jak SwingWorker. Ten pracownik może mieć java.util.Timer lub ScheduledExecutorService zgodnie z odpowiedzią syb0rg (odpowiedź od 1+ do syb0rg), która żąda i otrzymuje nowe dane co 5 sekund.
  5. Następnie wywołaj repaint() z wątku zdarzenia Swing po zmianie danych. Jeśli korzystasz z SwingWorker, para metod process/publish może w tym pomóc. W ten sposób możesz opublikować swoje dane w wątku zdarzenia Swing.
+0

Podałeś błędnie moje imię: P +1 dla wszystkich użytecznych rzeczy, o których nie wspomniałem. – syb0rg

+1

@ syb0rg: oops, moje złe! –

+0

+1 za krótki opis czynności w 5 punktach. –

Powiązane problemy