Java代码没有';定时器触发时,不能完全工作
我编写了一个简单的GUI,它从Excel电子表格中检索数据并将其绘制在屏幕上(连同一个特殊的颜色代码)。 程序本身运行得非常好。但是,当我添加了一个计时器(swing/utils尝试)来定期更新Excel数据(即每15秒重新加载数据)时,屏幕上缺少了很多数据(空白标签,应该用文本填充,等等) 我删除了计时器->再次正常工作(但当然需要每隔一段时间重新启动一次程序-我无法忍受:D) 我添加了一个按钮来尝试手动数据更新->非常有效,但是-meh-它应该定期更新,而不需要任何人点击按钮 计时器函数似乎要求线程在某个(非常短的)时间段内完成 你有什么建议 代码:Java代码没有';定时器触发时,不能完全工作,java,swing,user-interface,timer,Java,Swing,User Interface,Timer,我编写了一个简单的GUI,它从Excel电子表格中检索数据并将其绘制在屏幕上(连同一个特殊的颜色代码)。 程序本身运行得非常好。但是,当我添加了一个计时器(swing/utils尝试)来定期更新Excel数据(即每15秒重新加载数据)时,屏幕上缺少了很多数据(空白标签,应该用文本填充,等等) 我删除了计时器->再次正常工作(但当然需要每隔一段时间重新启动一次程序-我无法忍受:D) 我添加了一个按钮来尝试手动数据更新->非常有效,但是-meh-它应该定期更新,而不需要任何人点击按钮 计时器函数似乎
对GUI的更新必须在事件线程上完成。MouseListener是在事件线程上执行的,但计时器的run()方法不是。run()方法中的GUI更新代码应该在另一个传递给SwingUtilities.invokeLater()的runnable中完成。能否显示代码?似乎您需要的是一个调度程序,而不是计时器。上面添加的是“点击”而不是“克利克”:)。是的,我试过几种方法,但都不管用。我真的很想知道为什么它在通过鼠标点击而不是通过计时器/调度程序进行更新时能够完美地工作……为了更快地获得更好的帮助,请发布一个(最小完整的可验证示例)或(简短、自包含、正确的示例)。
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
.
.
.
}
}, 100, 15000);