【问题标题】:How do I remove my listener after finishing what I started? (JAVA)完成我开始的内容后如何删除我的听众? (JAVA)
【发布时间】:2019-06-07 10:34:09
【问题描述】:

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



}

【问题讨论】:

    标签: java javafx imageview listener


    【解决方案1】:

    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-

    【讨论】:

    • 太棒了!但是如何让它在移除监听器之前等待监听器完成它的任务呢?
    猜你喜欢
    • 2013-08-31
    • 1970-01-01
    • 2015-05-30
    • 2020-05-23
    • 1970-01-01
    • 2020-08-10
    • 2017-01-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多