我正在用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;
}
}
});
}
答案 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);
}