java:ActionListener变量包含修改自身的操作 - '变量可能尚未初始化'

时间:2017-01-08 21:18:55

标签: java actionlistener variable-initialization

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

  1. 创建一个ActionListener

    一个。将其自身从将要连接的按钮中移除(参见2.)

    湾做其他一些事情

  2. 将ActionListener添加到按钮

  3. (代码:)

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

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

2 个答案:

答案 0 :(得分:1)

更改

playButton.removeActionListener(playButtonActionListener);

with:

playButton.removeActionListener(this);

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

答案 1 :(得分:1)

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

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

    playButton.addActionListener(playButtonActionListener);