Swing计时器的问题

时间:2011-04-12 15:44:13

标签: java swing timer

我有3个计时器在我的应用程序上运行,它负责不同的操作。计时器1将处理应用程序的自动注销,计时器2处理更新表,计时器3处理更新摆动按钮的颜色。第一个计时器使用基于变量及其值的计算,第二个和第三个计时器使用MYSQL查询。

现在,当我在一台普通性能机器上运行此应用程序时,应用程序没有移动。我需要等待几秒钟才能正常点击或打开一个窗口。这与计时器有关吗?如果是,我是否有任何其他建议可以解决此计时器问题?enter image description here

4 个答案:

答案 0 :(得分:4)

如果他们在被解雇时表现出相当大的工作,那么很可能是计时器。对于长时间运行的任务,使用摆动计时器通常不是一个好主意,因为它们会阻止EDT并冻结UI。

以下是一些避免这种情况的建议:

  1. 使用java.util.Timer而不是挥杆计时器。这将在后台线程上运行数据库代码,从而避免阻塞事件队列。
  2. 继续使用swing计时器,但让计时器操作只需启动SwingWorker即可执行任务。如果操作需要超过一秒左右的时间才能执行,那么这样就可以为后台处理提供更新功能。
  3. 问题不在于你有多少计时器,而是每个计时器花了多长时间才能完成它的工作,因为计时器的actionPerformed方法是在swing事件线程上运行的,这意味着当计时器正在执行它时事情,没有UI更新可能发生。

答案 1 :(得分:2)

这不应该与Swing计时器相关,这是您的代码中的其他内容。您需要调试应用程序以查看导致延迟的原因。

答案 2 :(得分:0)

根据我的记忆,摆动计时器会在用于渲染的同一个线程上触发事件,所以你不会因为错误的线程交互而得到异常 - 我过去曾经使用它们来制作没有问题的动画 - 我怀疑答案在于代码中的其他地方。您是否尝试过在遇到问题时对代码进行分析?

答案 3 :(得分:0)

  

如果我同时运行5个计时器可以吗?

javax.swing.Timer的所有实例都使用单个共享线程执行等待。“当胎面变得饱和时发生极限。实际上,每个Timer可能有多个侦听器,但“处理程序必须快速执行以保持GUI响应。”