Ben*_*Ben 4 java swing timer actionlistener
我对java比较陌生,对ActionListeners的工作方式很好奇.假设我有一个实现如下定时器的动作监听器:
class TimerActionListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
//perform some operation
}
}
Run Code Online (Sandbox Code Playgroud)
如果将计时器设置为比我的actionlistener类中的代码运行得更快,将会发生什么.代码是否完成执行并忽略新请求,直到完成(如中断).或者对actionlistener的新调用优先于当前实例 - 这样代码永远不会完成?
计时器的计时是在与事件派发线程(或EDT)不同的线程中完成的,事件派发线程是在ActionListener中运行代码的线程.因此,即使actionPerformed代码很慢,计时器也将继续触发,并将其actionPerformed代码排队在事件队列上,这可能会被备份,事件线程将被阻塞,应用程序将无法响应或响应不佳.
回归点是避免调用任何在事件线程上花费一些时间的代码,因为它会使GUI无响应.考虑使用SwingWorker来处理这种情况.
编辑:请参阅下面的trashgod评论获胜!
| 归档时间: |
|
| 查看次数: |
1772 次 |
| 最近记录: |