MediaPlayer在JavaFX中陷入了无限循环

时间:2013-04-11 18:33:40

标签: java javafx-2 javafx

我正在尝试从JavaFX媒体播放器中检索元数据。我创建了一个类,将歌曲的所有元数据拉入字典,然后将其添加到其他歌曲的元数据列表中。我一直试图在元数据拉动时锁定此列表,但每次添加某种同步对象时,媒体播放器都会陷入循环。目前,这看起来像:

        Media track = new Media(f.toURI().toString());          
        MediaPlayer mp = new MediaPlayer(track);
        while(mp.getStatus() != Status.READY) {
            // Wait until ready
            try {
                Thread.sleep(1000);

            }
            catch (InterruptedException e) {
                e.printStackTrace();

            }
            System.out.println(mp.getStatus().toString());
            // Check for errors
            if (mp.getError() != null) {
                System.out.println(mp.getError());
                try {
                    Thread.sleep(10000);
                }
                catch (InterruptedException e) {
                    e.printStackTrace();

                }

            }

        }

        // Construct dictionary and add it to this.db
        Hashtable<String, String> entry = new Hashtable<String, String>();
        for (String key : mp.getMedia().getMetadata().keySet()) {
            entry.put(key, mp.getMedia().getMetadata().get(key).toString());

        }
        if (entry != null) {
            entry.put("file_path", mp.getMedia().getSource());
            db.add(entry);
            System.out.println(getByIndex(0).toString());

        }

状态打印始终打印UNKNOWN,并且不会抛出任何错误。知道这里可能会发生什么吗?谢谢!

编辑 - 应该提到的,我试图播放的媒体是MP3文件,它在我的代码的不同部分工作(因此,编解码器不是问题)。

1 个答案:

答案 0 :(得分:2)

您正在停止JavaFX应用程序线程,因此它可以执行任何操作。

使用线程睡眠构造而不是while true,为媒体播放器提供onReady处理程序,并在播放器告诉您已准备就绪时查询和处理元数据。