java fx media中的media metadata observable map为null

时间:2012-09-01 06:02:46

标签: javafx-2

大家好我尝试播放一首歌并使用java fx 2.1 api使用以下代码打印其元数据

    Media media = new Media(UIandControls.class.getResource("/assets/testData/mom.mp3").toExternalForm());
    MediaPlayer mediaPlayer = new MediaPlayer(media);
    ObservableMap list=media.getMetadata();
         System.out.print(list);
         mediaPlayer.play();

由于某种原因,getMetadata()是空的可观察Map。

输出看起来像这样

  

{}

请帮帮我..谢谢。

2 个答案:

答案 0 :(得分:0)

在检索元数据之前需要调用mediaPlayer.play()。

答案 1 :(得分:0)

起初我遇到了麻烦,但我发现用这个很有效。

mediaPlayer.getMedia().getMetadata().addListener(new MapChangeListener<String, Object>(){
        @Override
        public void onChanged(Change<? extends String, ?> change) {
            if(change.wasAdded()){
                if(change.getKey().equals("artist"))
                    setArtist(change.getValueAdded().toString());
                else if(change.getKey().equals("title"))
                    setTitle(change.getValueAdded().toString());
                else if(change.getKey().equals("year"))
                    setYear(change.getValueAdded().toString());
            }
        }
    });

另外我读到初始化后媒体数据并不总是存在,因此调用mediaPlayer.setOnReady()方法可以确保数据存在。

示例:

mediaPlayer.setOnReady(new Runnable(){
        @Override
        public void run() {
            setTrackLength(mediaPlayer.getMedia().getDuration().toMinutes());
            mediaPlayer.currentTimeProperty().addListener(progressChangeListener);
        }
    });