Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java代码没有';定时器触发时,不能完全工作_Java_Swing_User Interface_Timer - Fatal编程技术网

Java代码没有';定时器触发时,不能完全工作

Java代码没有';定时器触发时,不能完全工作,java,swing,user-interface,timer,Java,Swing,User Interface,Timer,我编写了一个简单的GUI,它从Excel电子表格中检索数据并将其绘制在屏幕上(连同一个特殊的颜色代码)。 程序本身运行得非常好。但是,当我添加了一个计时器(swing/utils尝试)来定期更新Excel数据(即每15秒重新加载数据)时,屏幕上缺少了很多数据(空白标签,应该用文本填充,等等) 我删除了计时器->再次正常工作(但当然需要每隔一段时间重新启动一次程序-我无法忍受:D) 我添加了一个按钮来尝试手动数据更新->非常有效,但是-meh-它应该定期更新,而不需要任何人点击按钮 计时器函数似乎

我编写了一个简单的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);