我对 java 比较陌生,对 ActionListeners 的工作方式很好奇。假设我有一个定时器的 Action 监听器,实现如下:
class TimerActionListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
//perform some operation
}
}
如果将计时器设置为比我的 actionlistener 类中的代码运行得更快,会发生什么。代码是否完成执行并忽略新请求,直到完成(如中断)。或者对 actionlistener 的新调用是否优先于当前实例 - 以至于代码永远不会完成?
最佳答案
计时器的计时是在与事件调度线程(或 EDT)不同的线程中完成的,事件调度线程是在 ActionListener 中运行代码的线程。因此,即使 actionPerformed 代码很慢,计时器仍会继续触发,并将其 actionPerformed 代码排在事件队列中,事件队列可能会被备份,事件线程将被阻塞,应用程序将无响应或响应不佳。
重点是避免调用任何在事件线程上花费一些时间的代码,因为它会使 GUI 无响应。考虑在这种情况下使用 SwingWorker。
编辑:请参阅下面的垃圾神评论以获得胜利!