2013-06-10 5 views
1

나쁜 영어로 죄송합니다. :) mp3 플레이어에 문제가 있습니다. jLayer를 사용하고 있습니다. 이 내가 처음부터 끝까지 노래를 재생해야 내 코드Java Jlayer Mp3 Player - 반복하고 노래를 멈추는 법

내 응용 프로그램에서
private void formWindowOpened(java.awt.event.WindowEvent evt) {         

new Thread(){ 
    public void run(){ 
      try 
{ 

Player prehravac; 
FileInputStream buff = new FileInputStream(Okno.filename); 
      prehravac = new Player(buff); 
      prehravac.play(); 
      if (prehravac != null) 
      { 
       prehravac.play(); 
      } 
      } 
catch(Exception e) 
     { 

     } 
     } 

}.start(); 
} 

입니다. 노래가 끝나면 다시 시작해야하고 창이 닫히면이 노래를 멈추고 싶습니다 ...

누군가 나를 도와 줄 수 있습니까? :) 2 일 동안 노력하고있어 ... 다른 스레드에서 뭔가를 막을 방법을 모르겠다 ... 도와 줘서 고마워.

답변

3

JLayer는 연속 재생을 지원하지 않으므로 이전 플레이어가 끝난 후 반복적으로 새로운 플레이어를 시작하려면 루프를 사용해야합니다. 예를 들어 : 루프

try { do { FileInputStream buff = new FileInputStream(Okno.filename); prehravac = new AdvancedPlayer(buff); prehravac .play(); }while(loop); } catch(Exception ioe) { //TODO error handling }

당신은 당신이 한 번 또는 반복적으로 바로 재생하려는 경우에 따라 다른 방법으로 true 또는 false로 설정 할 수있는 부울 것.

나중에 스레드에 액세스하려면 최소한이를 변수로 선언해야합니다. 스레드를 확장하는 별도의 클래스를 작성하는 것이 더 좋습니다. 그렇게하면 나중에 호출 할 수있는 스레드에 메서드를 추가 할 수 있습니다. 당신은 단순히 스레드를 만들 수 있습니다 이것으로

import java.io.*; 
import javazoom.jl.player.*; 

public class MyAudioPlayer extends Thread { 

    private String fileLocation; 
    private boolean loop; 
    private Player prehravac; 

    public MyAudioPlayer(String fileLocation, boolean loop) { 
     this.fileLocation = fileLocation; 
     this.loop = loop; 
    } 

    public void run() { 

     try { 
      do { 
       FileInputStream buff = new FileInputStream(fileLocation); 
       prehravac = new Player(buff); 
       prehravac.play(); 
      } while (loop); 
     } catch (Exception ioe) { 
      // TODO error handling 
     } 
    } 

    public void close(){ 
     loop = false; 
     prehravac.close(); 
     this.interrupt(); 
    } 
} 

때이 같은 원하는 목적지 : 코드에 대한

는 그런 일을 보일 수 있습니다

private MyAudioPlayer thePlayer; 

    [... some class code here...] 

    public void yourMethod(){ 
     thePlayer = new MyAudioPlayer("path of the music file", true); 
     thePlayer.start(); 
    } 

을 당신이 얻으려면 어떤 시점에서 제거하십시오 thePlayer.close(); thePlayer는 다시 사용할 수 있도록 인스턴스 변수 여야합니다. 메소드 내에서만 선언하는 경우 메소드가 완료된 후에 사라집니다.

희망이 도움이됩니다.

+0

죄송합니다. 감사드립니다. 정말 많은 도움을주었습니다 :)) –