[英]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.