0

我有一些代码可以做到这一点:

  1. 创建一个 ActionListener

    一个。将自身从将附加到的按钮中移除(参见 2.)

    湾。做一些其他的事情

  2. 将该 ActionListener 添加到按钮

(在代码中:)

ActionListener playButtonActionListener = new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent ae) {
        playButton.removeActionListener(playButtonActionListener);
        // does some other stuff
    }
};

playButton.addActionListener(playButtonActionListener);

编译时,Java 将第 4 行报告为错误(variable playButtonActionListener might not have been initialized)并拒绝编译。这可能是因为从技术上讲,playButtonActionListener 直到右括号才完全初始化,并且removeActionListener(playButtonActionListener)需要在 playButtonActionListener 初始化之后发生。

有没有什么办法解决这一问题?我必须完全改变我写这个块的方式吗?还是有某种@标志或其他解决方案?

4

2 回答 2

1

改变

playButton.removeActionListener(playButtonActionListener);

和:

playButton.removeActionListener(this);

由于您在 ActionListener 匿名类中,this表示该类的当前实例。

于 2017-01-08T21:23:10.990 回答
1

您要删除的对象是侦听器本身,因此您可以通过以下方式访问它this

    ActionListener playButtonActionListener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent ae) {
            playButton.removeActionListener(this);
            // does some other stuff
        }
    };

    playButton.addActionListener(playButtonActionListener);
于 2017-01-08T21:23:38.917 回答