Swing 计时器的问题

Dee*_*pak 1 java swing timer

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

现在,当我在性能一般的机器上运行这个应用程序时,应用程序并没有移动。我需要等待几秒钟才能正常点击或打开一个窗口。和定时器有关系吗?如果是的话,我有什么替代建议来摆脱这个计时器问题吗?在此处输入图片说明

mdm*_*dma 5

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

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

  1. 使用java.util.Timer而不是摆动计时器。这将在后台线程上运行数据库代码,避免阻塞事件队列。
  2. 继续使用 Swing 计时器,但让计时器操作只需启动一个SwingWorker来执行任务。这提供了后台处理的好处,能够将更新发布到您的 UI,如果它是一个需要超过一秒左右的时间来执行的操作。

问题不在于你有多少个定时器,而是每个定时器需要多长时间来完成它的工作,因为定时器的actionPerformed方法是在 Swing 事件线程上运行的,这意味着当一个定时器在做它的事情时,不会发生 UI 更新。

  • +1。必须像@mdma 所说的那样,计时器正在执行的某些操作非常冗长。阅读关于 Swing Timer 的 Java 教程:“一般来说,我们建议对 GUI 相关任务使用 Swing 计时器而不是通用计时器,因为 Swing 计时器都共享相同的、预先存在的计时器线程,并且 GUI 相关任务会自动在事件调度线程。但是,如果您不打算从计时器触摸 GUI,或者需要执行冗长的处理,您可以使用通用计时器。http://download.oracle.com/javase/tutorial/uiswing/misc/timer.html (2认同)