gpt4 book ai didi

java - 停止 Action 监听器队列

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:07:02 24 4
gpt4 key购买 nike

我有这个:

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);

The code always executes action 3, then 2 and 1 in that order.

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

感谢您的宝贵时间。

最佳答案

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

protected void fireActionPerformed(ActionEvent e)
{
// Dispatch a copy of the given ActionEvent in order to
// set the source and action command correctly.
ActionEvent ae = new ActionEvent(
this,
e.getID(),
getActionCommand(),
e.getWhen(),
e.getModifiers());

ActionListener[] listeners = getActionListeners();

for (int i = 0; i < listeners.length; i++) //no way to prematurely terminate this loop
listeners[i].actionPerformed(ae);
}

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

关于java - 停止 Action 监听器队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53526994/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com