2013-04-11 5 views
2

JavaFX 미디어 플레이어에서 메타 데이터를 검색하려고합니다. 노래의 모든 메타 데이터를 사전으로 가져 와서 다른 노래의 메타 데이터 목록에 추가하는 클래스를 만들었습니다. 메타 데이터를 가져 오는 동안이 목록을 잠그려고했는데 일종의 동기화 개체를 추가 할 때마다 미디어 플레이어가 루프에 갇히게됩니다. 현재 모양은 다음과 같습니다.JavaPX의 MediaPlayer가 무한 루프에 걸렸습니다.

 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을 인쇄하며 오류가 발생하지 않습니다. 여기에 무슨 일이 일어날 지 모릅니다. 감사!

EDIT- 언급해야 할 것은 내가 연주하려고하는 미디어가 내 코드의 다른 섹션에서 작동 한 MP3 파일입니다 (따라서 코덱은 문제가되지 않습니다).

+0

예, 일반적인 진행은 '알 수 없음'-> '준비'입니다. 이것은 코드의 다른 부분에서이 작업을 수행하지만 위의 상태를 확인할 때 어떤 이유인지 알 수 없으므로 실속합니다. –

답변

2

아무 것도 할 수 있도록 JavaFX 응용 프로그램 스레드를 정지하고 있습니다.

스레드 잠자기 구성의 경우 true 대신에 미디어 플레이어에 onReady 처리기를 제공하고 플레이어가 준비가되었다고 말하면 메타 데이터를 쿼리하고 처리합니다.

관련 문제