Ajuda com Threads

5 respostas
N

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 ?

5 Respostas

N

Help D;

M

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;

d34d_d3v1l

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!!

N

Valeu galera, vou tentar fazer isso aqui.

N

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

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();
    }
   
}

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

Criado 25 de outubro de 2012
Ultima resposta 26 de out. de 2012
Respostas 5
Participantes 3