2013-04-11 95 views
2

我試圖從JavaFX媒體播放器檢索元數據。我創建了一個類,將歌曲的所有元數據提取到字典中,然後將其添加到其他歌曲的元數據列表中。我一直試圖鎖定這個列表,而元數據正在拉動,但每次我添加某種同步對象時,媒體播放器都會陷入循環。目前,這看起來像:MediaPlayer卡在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文件,它在我的代碼的不同部分工作(所以,編解碼器不是問題)。

+0

是的,通常的進程來自'UNKNOWN' - >'READY'。它在代碼的其他部分執行此操作,但由於某種原因,當我檢查上述狀態時,它在UNKNOWN上停頓。 – 2013-04-11 19:08:39

回答

2

您正在拖延JavaFX應用程序線程,以便它可以執行任何操作。

而不是使用線程休眠構造的while while,當媒體播放器告訴你它已準備好時,向媒體播放器提供處理器並查詢和處理元數據。