我有一些代码可以做到这一点:
创建一个ActionListener
一个。将其自身从将要连接的按钮中移除(参见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初始化之后发生。
有什么方法可以解决这个问题吗?我是否必须完全改变我写这个块的方式?或者是否有某种@
标志或其他解决方案?
答案 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);