java:ActionListener 变量包含修改自身的动作 - 'Variable might not have been initialized'

java: ActionListener variable contains action to modify itself - 'Variable might not have been initialized'

我有一些代码可以执行此操作:

  1. 创建一个 ActionListener

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

    b。做一些其他的事情

  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 初始化之后发生。

有什么办法可以解决这个问题吗?我是否必须完全改变编写此块的方式?或者是否有某种 @ 标志或其他解决方案?

改变

playButton.removeActionListener(playButtonActionListener);

与:

playButton.removeActionListener(this);

由于您在 ActionListener 中是匿名的 class,this 代表 class.

的当前实例

您要删除的对象是侦听器本身,因此您可以通过 this:

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

    playButton.addActionListener(playButtonActionListener);