Как удалить слушателя после завершения начатого? (ДЖАВА) - PullRequest
0 голосов
/ 13 января 2019

Я создаю медиаплеер в JavaFX. В одном из моих методов я создал способ поиска метаданных в медиа-файле, а затем отобразил их в ImageView. В первый раз работает нормально, но как только я хочу вызвать его снова, используя другой объект Media, изображение не появляется. Я немного смущен и неопытен, но я думаю, что, возможно, мне нужно сбросить / остановить слушателя, прежде чем перейти к следующему объекту в строке?

Итак, мой вопрос! Как вы удаляете слушателя, когда «изображение» было найдено, что вы печатаете, чтобы это произошло?

Если вы считаете, что есть другая причина, по которой мое изображение не будет отображаться во второй раз, пожалуйста, дайте мне знать.

Спасибо специально.

private void displayAlbumCover (){

    // Will start to show a blank CD
    File file = new File("src/sample/images/blank_cd.jpeg");

    Image image = new Image(file.toURI().toString());

    albumCoverView.setImage(image);


    // However if an album cover is found in the meta-data it will be displayed
    ObservableMap<String,Object> meta_data=me.getMetadata();

    meta_data.addListener((MapChangeListener<String, Object>) ch -> {



        if(ch.wasAdded()){

            String key=ch.getKey();

            Object value=ch.getValueAdded();


            switch(key){
                case "image":
                    albumCoverView.setImage((Image)value);


                    break;
            }
        }
    });



}

1 Ответ

0 голосов
/ 13 января 2019

ObservableMap имеет метод removeListner . Вы можете сохранить экземпляр слушателя в переменной и затем удалить его позже.

private MapChangeListener<String, Object> listener;

private void displayAlbumCover (){
    // ...

    this.listener = //...
    meta_data.addListener(listener);
}

private void removeListener() {
  me.getMetadata().removeListener(this.listener);
}

https://docs.oracle.com/javase/8/javafx/api/javafx/collections/ObservableMap.html#removeListener-javafx.collections.MapChangeListener-

...