Ajuda com Threads

Pessoal, estou fazendo um programa, que é pra fazer uma rádio. Então, estou usando o JMF pra execução de musicas. Fiz os botoes de controle de musica (anterior, proxima, play, pause, stop). Falta implementar o caso onde , da lista de reprodução, quando acabar uma musica, o programa já passa para a próxima. Algumas pessoas disseram para usar Threads, olhei o material de Threads só que não sei onde aplicar no projeto.

Tentei fazer com um While para pegar o ‘getMediaTime()’ e comparar com o ‘getMediaDuration’, se fossem iguais , ele parava e passava pra próxima, mas não dar certo. O While trava o programa, até sair do bloco.

O Projeto tem uma classe ‘Reprodutor’ que é onde fica o player. Acho que é essa classe que ‘implements’ o Runnable.

Alguem me ajuda por favor ?

Help D;

O mais adequado seria usar Thread mesmo para não ‘travar o programa’. Assim você poderá fazer duas coisas ao mesmo tempo como adicionar musica/remover/mudar etc. Se você não saber usar Thread o mais adequado é perquisar no google já que ele é um melhor professor do que eu.

Mas continuando, você pode criar uma classe do tipo

private class GerenciaMusicas extends Thread{
		private List<Musica> playList = new ArrayList<>();
		private Musica musicaTocando;
		private boolean TocadorParado = true;

		@Override
		public void run() {
                           while(true){
// verifica se esta tocando alguma música, caso não aguarda nesse loop até o usuário escolher uma
                                   while(){}

                                   //verifica se a música acabou
                                   if(){//sim
                                          //troca de musica (tem que ser synchronized )
                                   }
                                   else{
                                            //sleep aqui para não ficar verificando se a música acabou milhares de vezes por segundo
                                    }
                           }
                }
                public synchronized void addMusica( Musica m ) {..}
		
		public synchronized void removeMusica( Musica m ) {..}

}

Pelo menos foi isso que eu entendi, e essa a solução que pensei
O correto seria usar wait() e notify() mas acho que essa solução da pro gasto, dps você melhora;

Eu prefiro fazer uma classe que implementa Runnable …
e depois criar a thread passando a classe por parametro.

acho que fica melhor, além de possibilidar que crie outras interfaces para padronizar melhor a estrutura que a thread deve ter
(por ex.: os métodos adicionarMusica, removerMusica etc)

Abraços!!

Valeu galera, vou tentar fazer isso aqui.

magostta, olha aq, no projeto tem a Classe Reprodutor, que ela cria o player. Ela ta assim:

[code]import java.io.File;
import javax.media.Manager;
import javax.media.Player;
import javax.media.Time;
//import java.sql.Time;
/**
*
*
*/
public class Reprodutor {

private Player player;
private Time time;

public Reprodutor(Musica musica){
    time = new Time(0.0);
    try {
        
        File f = new File("Musicas/"+musica.getLocal().substring(11,musica.getLocal().length()));
        player = Manager.createRealizedPlayer(f.toURI().toURL());
       
        
    } catch (Exception e) {
        System.out.println("Arquivo não encontrado");
    }
}

public void reproduzir(){
    player.setMediaTime(time);
    player.start();
    
   
}

public void stop(){
    player.stop();
            
}

public void pause(){
   time = player.getMediaTime();
   player.stop();
   
}

public double getTime(){
   return player.getMediaTime().getSeconds();
   
}
public double getDuracao(){
    return player.getDuration().getSeconds();
}

}
[/code]

Ai tipo, la na tela onde reproduz, eu crio um reprodutor e passo a musica como parametro e tal. Esse codigo que você mandou, da pra fazer no reprodutor ? Pq nao sei se daria p passar a musica como parametro desse jeito q você falou.

Agradeço desde já ;D