我写了一个简单的GUI,它从Excel电子表格中检索数据并在屏幕上绘制(连同特殊颜色代码)。 该程序本身非常好。但是,当我添加一个计时器(swing / utils尝试)定期更新Excel数据(即每15秒重新加载一次数据)时,屏幕上缺少大量数据(空白标签应填充文本等)
我删除了计时器 - >再次完美地工作(但当然需要每隔一段时间重新启动一个程序 - 我不忍心:D) 我添加了一个按钮来试用手动数据更新 - >效果很好,但是 - 嗯 - 它应该定期更新,而不必按某个按钮
计时器功能似乎需要在某个(非常短的)时间内完成线程。
你会建议什么?
代码:
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
.
.
.
}
}, 100, 15000);
答案 0 :(得分:1)
必须在事件线程上完成对GUI的更新。 MouseListener 是在事件线程上执行,但您的计时器的run()方法不是。 run()方法中的GUI更新代码应该在另一个传递给SwingUtilities.invokeLater()的runnable中完成。