听众捕捉被解雇的事件需要多长时间?

时间:2018-04-12 13:18:34

标签: java events listener

假设一个侦听器被添加到一个组件然后被触发(类实现了这个侦听器):

newButton(); //pretend this is called somewhere

public void newButton() {
  JButton button = new JButton("test");
  button.addStuffListener(this);
  button.fireStuffEvent();
  System.out.println("action over"); //getting here
}


public void stuffPerformed(ActionEvent e) {
  System.out.println("action fired");
}

打印'行动超过'行需要多长时间?如何解决'动作'?当事件被触发时,Java是否会创建另一个线程?如果一个人不总是一个接一个地开火,那么确保他们这样做的安全方法是什么?

1 个答案:

答案 0 :(得分:2)

对于Java" UI用例",要了解的是Event Dispatcher Thread。该线程负责调度事件。

因此通过 ED线程调用侦听器方法。这转化为:每当你的监听器方法做得更接近于什么时,它必须将以某种方式推送到另一个线程中。否则你的听众活动开始"冻结"你的申请。因为ED线程忙于执行侦听器工作,而不是调度事件。

对于"何时" "听众被召唤":一旦ED线程能够被召唤。事件进入,在某些时候ED线程调度它们。我们不是在讨论实时软件堆栈,因此没有保证可能需要多长时间。

为了完整性:当我们谈论"测试"设置,你实际上不使用Swing / AWT按钮和" UI事件" - 但你只有自己的对象,互相调用:然后只有一个线程,按顺序执行所有操作。