每隔X秒重新加载JPanel(带线程?)

时间:2013-04-28 19:48:18

标签: java multithreading

我的程序中有一个设置选项卡。您可以在此处设置的数据不仅可以从此面板更改。这就是我想每5秒重新加载这些数据的原因。我认为这必须使用额外的Thread完成,但我对Threads的了解很少。为此,我已经有了重装方法。

我应该怎么做才能做到这一点(以及......)?

3 个答案:

答案 0 :(得分:5)

  

但我对线程的了解很少......

  1. 您绝对需要了解一般的线程,Java Concurrency Tutorial可以提供帮助。
  2. 然后你应该特别了解concurrency in Swing
  3. 在JPanel的paintComponent(...)方法中绘制GUI的数据图形表示,或者更好,在BufferedImage中绘制,然后显示在paintComponent(...)内。
  4. 在后台线程(如SwingWorker)中重新加载数据。根据syb0rg的答案(syb0rg的答案1+),这个Worker可以有一个java.util.Timer或ScheduledExecutorService,每隔5秒就会请求并获取新数据。
  5. 然后在更改数据后从Swing事件线程中调用repaint()。如果使用SwingWorker,进程/发布方法对可以帮助解决这个问题。您可以使用此函数将数据发布到Swing事件线程。

答案 1 :(得分:4)

使用ScheduledExecutorService

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

然后在JPanel中重新加载yourRunnable(只需按照JavaDocs中的示例)。

答案 2 :(得分:0)

您可以使用Timer定期更新数据。