我有3个计时器在我的应用程序上运行,它负责不同的操作。计时器1将处理应用程序的自动注销,计时器2处理更新表,计时器3处理更新摆动按钮的颜色。第一个计时器使用基于变量及其值的计算,第二个和第三个计时器使用MYSQL查询。
现在,当我在一台普通性能机器上运行此应用程序时,应用程序没有移动。我需要等待几秒钟才能正常点击或打开一个窗口。这与计时器有关吗?如果是,我是否有任何其他建议可以解决此计时器问题?
答案 0 :(得分:4)
如果他们在被解雇时表现出相当大的工作,那么很可能是计时器。对于长时间运行的任务,使用摆动计时器通常不是一个好主意,因为它们会阻止EDT并冻结UI。
以下是一些避免这种情况的建议:
问题不在于你有多少计时器,而是每个计时器花了多长时间才能完成它的工作,因为计时器的actionPerformed
方法是在swing事件线程上运行的,这意味着当计时器正在执行它时事情,没有UI更新可能发生。
答案 1 :(得分:2)
这不应该与Swing计时器相关,这是您的代码中的其他内容。您需要调试应用程序以查看导致延迟的原因。
答案 2 :(得分:0)
根据我的记忆,摆动计时器会在用于渲染的同一个线程上触发事件,所以你不会因为错误的线程交互而得到异常 - 我过去曾经使用它们来制作没有问题的动画 - 我怀疑答案在于代码中的其他地方。您是否尝试过在遇到问题时对代码进行分析?
答案 3 :(得分:0)
如果我同时运行5个计时器可以吗?
javax.swing.Timer
的所有实例都使用单个共享线程执行等待。“当胎面变得饱和时发生极限。实际上,每个Timer
可能有多个侦听器,但“处理程序必须快速执行以保持GUI响应。”