java:ActionListener 变量包含修改自身的动作 - 'Variable might not have been initialized'
java: ActionListener variable contains action to modify itself - 'Variable might not have been initialized'
我有一些代码可以执行此操作:
创建一个 ActionListener
一个。从将附加到的按钮中删除自身(参见 2.)
b。做一些其他的事情
将该 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);
我有一些代码可以执行此操作:
创建一个 ActionListener
一个。从将附加到的按钮中删除自身(参见 2.)
b。做一些其他的事情
将该 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);