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

java:ActionListener变量包含修改自身的操作-';变量可能尚未初始化';,java,actionlistener,variable-initialization,Java,Actionlistener,Variable Initialization,我有一些代码可以做到这一点: 创建ActionListener a。从将要连接到的按钮中删除自身(请参见2。) b。做一些其他的事情 将该ActionListener添加到按钮 (代码:) 在编译时,Java将第4行报告为错误(变量playButtonActionListener可能尚未初始化),并拒绝编译。这可能是因为在结束括号之前,playButtonActionListener在技术上没有完全初始化,而removeActionListener(playButtonActionListene

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

  • 创建ActionListener

    a。从将要连接到的按钮中删除自身(请参见2。)

    b。做一些其他的事情

  • 将该ActionListener添加到按钮

  • (代码:)

    在编译时,Java将第4行报告为错误
    (变量playButtonActionListener可能尚未初始化)
    ,并拒绝编译。这可能是因为在结束括号之前,playButtonActionListener在技术上没有完全初始化,而
    removeActionListener(playButtonActionListener)
    需要在playButtonActionListener初始化之后进行

    有办法解决这个问题吗?我必须完全改变我写这篇文章的方式吗?或者是否存在某种
    @
    标志或其他解决方案?

    更改

    playButton.removeActionListener(playButtonActionListener);
    
    与:

    playButton.removeActionListener(this);
    
    由于您在ActionListener匿名类中,
    表示该类的当前实例。

    更改

    playButton.removeActionListener(playButtonActionListener);
    
    与:

    playButton.removeActionListener(this);
    

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

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

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

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

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

    是的,它是一个复制品,尽管你发布了任何东西(我删除了);然而,这并不完全是一个重复的方式,我期待的职位被标记。我想我没有足够努力地搜索列表。谢谢。请理解,它不必是完全相同的。本网站的目的不是为您提供精确的代码解决方案,而是为一般问题提供可靠的答案。“如何访问对象本身中的匿名对象”的解决方案已经得到了很好的回答。是的,它是重复的,尽管您发布了任何内容(我已删除)。这是真的;然而,这并不完全是一个重复的方式,我期待的职位被标记。我想我没有足够努力地搜索列表。谢谢。请理解,它不必是完全相同的。本网站的目的不是为您提供精确的代码解决方案,而是为一般问题提供可靠的答案。“如何访问对象本身中的匿名对象”的解决方案已经得到了很好的回答;我会尽快接受这个答案!非常感谢。我会尽快接受这个答案!非常感谢。我会尽快接受这个答案!非常感谢。我会尽快接受这个答案!