为什么我不能从事件监听器调用方法,但可以在课堂的其他地方?

Ben*_*Ben 0 java oop javafx event-listener

我在控制器类中有以下代码,用于为组合框提供事件侦听器的 JavaFX GUI:

courseComboBox.getSelectionModel().selectedItemProperty()
                .addListener(new ChangeListener<String>() {
                    @Override
                    public void changed(
                            ObservableValue<? extends String> selected,
                            String oldValue, String newValue) {

                           // Do stuff

    }
});
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试从其中调用另一个方法时,我无法:

courseComboBox.getSelectionModel().selectedItemProperty()
                    .addListener(new ChangeListener<String>() {
                        @Override
                        public void changed(
                                ObservableValue<? extends String> selected,
                                String oldValue, String newValue) {

                                this.setClassList(courseProcessed);

                               // Do Stuff

   }
});
Run Code Online (Sandbox Code Playgroud)

不过,我可以在班级的其他地方调用该方法。更具体地说,我可以initialize()在该侦听器所在的控制器中的函数中调用它。为什么我会遇到这个问题?

Man*_*anu 5

因为this在侦听器内是指侦听器当前实例,而不是控制器实例。要引用容器实例,请使用语法ControllerClassName.this.