当由计时器触发时,Java代码不能完全工作

时间:2015-07-09 10:21:38

标签: java swing user-interface timer

我写了一个简单的GUI,它从Excel电子表格中检索数据并在屏幕上绘制(连同特殊颜色代码)。 该程序本身非常好。但是,当我添加一个计时器(swing / utils尝试)定期更新Excel数据(即每15秒重新加载一次数据)时,屏幕上缺少大量数据(空白标签应填充文本等)

我删除了计时器 - >再次完美地工作(但当然需要每隔一段时间重新启动一个程序 - 我不忍心:D) 我添加了一个按钮来试用手动数据更新 - >效果很好,但是 - 嗯 - 它应该定期更新,而不必按某个按钮

计时器功能似乎需要在某个(非常短的)时间内完成线程。

你会建议什么?

代码:

Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
  @Override
  public void run() {

  .
  .
  .           
       }

  }, 100, 15000);

1 个答案:

答案 0 :(得分:1)

必须在事件线程上完成对GUI的更新。 MouseListener 在事件线程上执行,但您的计时器的run()方法不是。 run()方法中的GUI更新代码应该在另一个传递给SwingUtilities.invokeLater()的runnable中完成。