2015-01-20 6 views
0

저는 노래를 연주하는 작은 사운드 플레이어를 연구하고 있습니다. TinySound 라이브러리 https://github.com/finnkuusisto/TinySound을 사용하고 있습니다. 그리고 API에서 볼 수 있듯이 .done()이라는 메서드가 있습니다.이 메서드는 Music 객체의 재생이 완료되었는지 여부를 알려주지 만 재생하는 동안 어떻게 테스트 할 수 있습니까?노래 재생이 완료되면 어떻게 알 수 있습니까?

저는 현재 노래를 표시하는 버튼과 Jlist가있는 JFrame을 만들었지 만, 어떤 종류의 while 루프를 사용하여 곡을 듣거나 노래가 끝나지 않으면 다른 노래를 사용할 수 없다는 것을 이해합니다. 같은 정지 등의 버튼 등

을 일시 정지 나는이 라인을 따라 어딘가 생각했다 (의사 코드) :

while(theSong.playing()){ 
    if(theSong.done()){ 
     playNext(); 
    } 
} 

문제 while 루프를 입력 할 때, 나는 다른 기능을 사용할 수 없습니다 오전입니다 내 프로그램에서. 누구든지 샘플 코드를보고 싶다면 알려주세요!

Sindre M

+1

이 소리 ... – xdhmoore

+0

내가 스레드를 사용한 적이을하지만 많이 고맙겠습니다! –

+1

간단한 스레드 예 : http://stackoverflow.com/questions/2531938/java-thread-example –

답변

0

붙어 인터페이스를 만들 것입니다 귀하의 GUI와 같은 스레드에서이 while을 실행합니다. 당신은 SwingUtilities의 invokeAndWait의 방법을 사용하여 원하는 기능을 수행 할 수 있습니다 사람이 설명하거나 일부 튜토리얼 링크 할 경우 별도의 스레드 또는 뭔가를 시작해야 할 수 있습니다처럼

SwingUtilities.invokeAndWait(new Runnable() { 
    public void run() { 
     while(theSong.playing()) { 
      if(theSong.done()) { 
       playNext(); 
      } 
     } 
    } 
} 
+0

이 이벤트에 대해서만 SwingUtilities를 제공하겠습니까? 아니면 run() 메소드를 제공해야합니까? 전체 응용 프로그램에 대한? 다른 모든 것이 원했기 때문에 그냥 생각하니? –

+0

@SindreMoldeklev, Swing이 실행중인 스레드를 찌르는 무언가를 수행 할 때마다 사용할 수 있습니다. 막대 진행을 업데이트하는 동안 백그라운드에서 무언가를 실행하기 위해 진행 막대와 함께 자주 사용됩니다. –

+0

나는 이것을 시험 할 것이다! 고마워. –