gpt4 book ai didi

java - 删除 MouseListener 会产生 ArrayIndexOutOfBoundsException

转载 作者:行者123 更新时间:2023-11-29 06:00:43 24 4
gpt4 key购买 nike

我收到“线程“AWT-EventQueue-0”中的异常”java.lang.ArrayIndexOutOfBoundsException:0我真的不明白为什么。

我将这两个内部类用作名为 bildYta 的 JPanel 的监听器:

private class NyPlatsLyss implements ActionListener{
public void actionPerformed(ActionEvent e){
bildYta.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
bildYta.addMouseListener(new BildYtaLyss());
bildYta.addKeyListener(new EscLyss());
bildYta.requestFocusInWindow();
enableOperations(false);
}
}

private class EscLyss extends KeyAdapter{
public void keyPressed(KeyEvent e){
if(e.getKeyCode()==KeyEvent.VK_ESCAPE){
bildYta.setCursor(Cursor.getDefaultCursor());
bildYta.removeMouseListener(bildYta.getMouseListeners()[0]);
bildYta.removeKeyListener(this);
enableOperations(true);
}
}
}

当我按下按钮时,它会将两个监听器添加到 bildYta。我不明白的是为什么我在删除刚刚添加的鼠标监听器时得到 .ArrayIndexOutOfBoundsException:0。有时我什至没有得到异常,有时我会。我的其余代码中的任何内容都不会造成任何麻烦,因为在我添加了这些监听器之后,我的程序中应该不会发生任何其他事情。它等待 ESC 按下或鼠标单击

最佳答案

这是非常脆弱的代码。 EscLyss 处理的事件可能会触发多次,但只有第一次会起作用。向您的代码添加一些检查。更好的是,将您的 EscLyss 实例保存到一个字段中,然后直接删除该特定实例。更好的是,将该实例设为最终实例,您可以重用它,根据需要重复添加和删除它。事实上,这就是我们通常这样做的方式。

private final MouseListener bildYtaLyss = new BildYtaLyss();

private class NyPlatsLyss implements ActionListener{
public void actionPerformed(ActionEvent e) {
bildYta.setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
bildYta.addMouseListener(bildYtaLyss);
EscLyss escLyss = new EscLyss();
bildYta.addKeyListener(escLyss);
bildYta.requestFocusInWindow();
enableOperations(false);
}
}

private class EscLyss extends KeyAdapter{
public void keyPressed(KeyEvent e){
if(e.getKeyCode()==KeyEvent.VK_ESCAPE){
bildYta.setCursor(Cursor.getDefaultCursor());
bildYta.removeMouseListener(bildYtaLyss);
bildYta.removeKeyListener(this);
enableOperations(true);
}
}
}

关于java - 删除 MouseListener 会产生 ArrayIndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10206119/

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