首先,我不是在询问事件处理.我知道使用Observer模式实现了处理.
让我举一个小例子.假设我在JFrame上有一个Jbutton.我单击此按钮的顶部.现在按钮如何知道我点击了它?
1)是否有任何java线程等待点击?如果是这样的代码来自哪里(等到我点击部分)?那么每个swing组件是否都在等待线程之上的事件?我认为这是一项非常昂贵的任务.
2)如果没有,这是如何工作的?
观察者模式在整个堆栈中使用:
我们的 Swing 应用程序的“事件调度线程”运行以下形式的循环:
while (!shutdownRequested) {
Event e = retrieveEventFromEventQueue(); // for instance our mouse clicked event
handleEvent(e);
}
Run Code Online (Sandbox Code Playgroud)
在 AWT / Swing 中,有一个线程执行该代码。第一个调用将阻塞,直到有新事件可用,handleEvent() 将调用该事件的侦听器。也就是说,单个线程执行所有 UI 更新(这就是为什么不应在事件侦听器中完成长时间运行的任务,因为这会冻结 UI),并且如果用户不与应用程序交互,则该线程将处于睡眠状态。
| 归档时间: |
|
| 查看次数: |
444 次 |
| 最近记录: |