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() は空の監視可能な Map です。

出力は次のようになります

{}

助けてください..ありがとう。

4

2 に答える 2

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 に答える
0

メタデータを取得する前に、mediaPlayer.play() を呼び出す必要があります。

于 2013-08-16T21:44:51.507 に答える