停止动作侦听器队列

时间:2018-11-28 19:45:07

标签: java

我有这个:

public void actionPerformed1(ActionEvent e) { ... }
public void actionPerformed2(ActionEvent e) { ... }
public void actionPerformed3(ActionEvent e) { ... }

JButton b = new JButton();

b.addActionListener(this::actionPerformed1);
b.addActionListener(this::actionPerformed2);
b.addActionListener(this::actionPerformed3);
  

代码始终按顺序执行动作3,然后依次执行2和1。

是否可以在不引发运行时异常的情况下停止队列的执行?

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

我认为不使用Exception就无法停止它。如果查看JButton中触发ActionEvent(sb)时执行的代码,您会发现它只是在for循环中迭代已注册{{1}数组的副本}。 因此,您可以尝试在回调方法中取消所有ActionListeners的注册,但这无济于事,因为循环使用本地副本。而且您也不能从回调中递增变量Actionlistener

i

不过,您可以在类中使用一个公共变量来向您的回调方法发出信号,即它们应该只返回,但这不会避免执行,而只是执行会过早决定的代码返回。