0

大家好,我尝试使用以下代码使用 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() 是空的可观察地图。

输出看起来像这样

{}

请帮助我..谢谢。

4

2 回答 2

0

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

于 2013-08-16T21:44:51.507 回答
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);
        }
    });
于 2015-05-19T00:10:51.510 回答