[英]Why can't I call method from event listener but can elsewhere in class?
我在JavaFX GUI的控制器类中具有以下代码,该类为组合框提供了事件侦听器:
courseComboBox.getSelectionModel().selectedItemProperty()
.addListener(new ChangeListener<String>() {
@Override
public void changed(
ObservableValue<? extends String> selected,
String oldValue, String newValue) {
// Do stuff
}
});
但是,当我尝试从其中调用另一个方法时,我无法:
courseComboBox.getSelectionModel().selectedItemProperty()
.addListener(new ChangeListener<String>() {
@Override
public void changed(
ObservableValue<? extends String> selected,
String oldValue, String newValue) {
this.setClassList(courseProcessed);
// Do Stuff
}
});
不过,我可以在类中的其他地方调用该方法。 更具体地说,我可以在该侦听器也驻留的控制器中的initialize()
函数内调用它。为什么会有这个问题?
因为this
听者内指的是监听当前实例,而不是控制器实例。 要引用容器实例,请使用语法ControllerClassName.this
。
这里的问题是:
new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> selected, String oldValue, String newValue) {
this.setClassList(courseProcessed);// `this` refers to the current instance of the anonymous class `ChangeListener`
}
}
在此匿名类ChangeListener
,没有名为setClassList()
方法,因此编译器对此有所抱怨。 您可以尝试避免使用this
关键字:
setClassList(courseProcessed);
要么
您也可以尝试以下方法:
YourClass.this.setClassList(courseProcessed);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.