Lukas Méndez Duus
Lukas Méndez Duus

Reputation: 436

How do I remove my listener after finishing what I started? (JAVA)

I'm creating a media player in JavaFX. In one of my methods, I've created a way to search for metadata in a Media-file and then display it in ImageView. Works fine first time, but as soon as I want to call it again using another Media object, the image doesn't show up. I'm a bit confused and inexperienced, but I think that perhaps I need to reset/stop the listener before going to next object in line?

So my question is! How do you remove the listener when "image" has been found, what do you type to make it happen?

If you think that there's another reason why my image wont display the second time, please let me know as well.

Thanks on purpose.

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;
            }
        }
    });



}

Upvotes: 0

Views: 355

Answers (1)

Kazuki
Kazuki

Reputation: 1492

ObservableMap has removeListner method. You can keep the listener instance to variable and then remove it later.

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-

Upvotes: 2

Related Questions