完成我的开始后,如何删除我的听众? (JAVA)

时间:2019-01-12 22:45:19

标签: java javafx imageview listener

我正在用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 :(得分:2)

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-