如何在Java中生成事件?

Des*_*PRG 5 java events swing

首先,我不是在询问事件处理.我知道使用Observer模式实现了处理.

让我举一个小例子.假设我在JFrame上有一个Jbutton.我单击此按钮的顶部.现在按钮如何知道我点击了它?

1)是否有任何java线程等待点击?如果是这样的代码来自哪里(等到我点击部分)?那么每个swing组件是否都在等待线程之上的事件?我认为这是一项非常昂贵的任务.

2)如果没有,这是如何工作的?

mer*_*ike 3

观察者模式在整个堆栈中使用:

  1. 用户释放鼠标按钮
  2. 鼠标向CPU发送消息,触发硬件中断
  3. 操作系统的中断处理程序意识到自按下按钮以来鼠标尚未移动,即发生了鼠标单击。它识别鼠标所在位置的窗口以及负责该窗口的应用程序,并将鼠标单击消息放入应用程序的事件队列中
  4. 我们的 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),并且如果用户不与应用程序交互,则该线程将处于睡眠状态。