我编写了一个简单的GUI,它从Excel电子表格中检索数据并将其绘制在屏幕上(连同特殊颜色代码)。程序本身工作得很好。但是当我添加了一个计时器(swing/utils尝试)来定期更新Excel数据(即。每15秒重新加载一次数据)屏幕上丢失了很多数据(应该用文本填充的空白标签等)
我删除了计时器->再次完美地工作(但当然需要每隔一段时间重新启动一次程序-这是我不能忍受的:D)我添加了一个按钮来尝试手动数据更新->工作完美,但是- meh -它应该定期更新,而不必有人点击按钮
定时器功能似乎要求线程在一定的(很短的)时间内完成。
你有什么建议吗?
代码:Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
.
.
.
}
}, 100, 15000);
对GUI的更新必须在事件线程上完成。MouseListener 在事件线程上执行,但计时器的run()方法不是。run()方法中的GUI更新代码应该在传递给swingutility . invokelater()的另一个可运行程序中完成。