[Resolvido] Sincronizar a apresentação da Logo com a uma musica

2 respostas
DiegoFroes

Olá pessoal, a dúvida é a seguinte, eu tenho o código, postado abaixo, que apresenta uma Logo do Jogo e uma barra de carregamento/progresso.
O que quero fazer e sincronizar uma música de fundo enquanto a barra de progresso carrega…

A barra de progresso está funcionando e o tocar da musica tbem… Só que ao colocar a musica nesse código, ele faz o seguinte: toca a música primeiro depois que carrega
a barra.

Teria como fazer isso simultaneamente(Tocar a musica enquanto a barra carrega)?
Teria que ter 2 Thread, uma para a Barra, já existe, e uma outra para tocar a Música?

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package logo;

import java.awt.Color;
import java.awt.Dimension;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JProgressBar;
import javax.swing.JWindow;
import jogodaforcacliente.DatagramClient;
import org.netbeans.lib.awtextra.AbsoluteConstraints;
import org.netbeans.lib.awtextra.AbsoluteLayout;

/**
 *
 * @author Diego Oliveira Froes
 */
public class Logotipo extends JWindow {

    AbsoluteLayout absoluto;
    AbsoluteConstraints absimagem, absbarra;
    ImageIcon imagem;
    JLabel labelImg;
    JProgressBar barra;

    @SuppressWarnings("CallToThreadStartDuringObjectConstruction")
    public Logotipo() {
        absoluto = new AbsoluteLayout();
        absimagem = new AbsoluteConstraints(0, 0);
        absbarra = new AbsoluteConstraints(0, 320);

        labelImg = new JLabel();
        imagem = new ImageIcon(this.getClass().getResource("../imagens/forca.png"));
        labelImg.setIcon(imagem);

        barra = new JProgressBar();
        barra.setPreferredSize(new Dimension(575, 15));
        barra.setBackground(Color.DARK_GRAY);

        this.getContentPane().setLayout(absoluto);
        this.getContentPane().add(labelImg, absimagem);
        this.getContentPane().add(barra, absbarra);

        new Thread() {

            @Override
            @SuppressWarnings("SleepWhileInLoop")
            public void run() {
                playLogoMusic();

                int i = 0;
                while (i < 101) {
                    barra.setValue(i);
                    i++;
                    try {
                        sleep(30);
                    } catch (InterruptedException ex) {
                        Logger.getLogger(Logotipo.class.getName()).log(Level.SEVERE,
                                null, ex);
                    }
                }

                setVisible(false);

                //DatagramClient dC = new DatagramClient();
                //dC.cliente();
            }
        }.start();

        this.pack();
        this.setVisible(true);
    }

    public static void playLogoMusic() {

        try {
            java.io.InputStream in = (java.io.InputStream) (new java.io.FileInputStream("c:\\music.mp3"));
            javazoom.jl.player.Player p = new javazoom.jl.player.Player(in);
            p.play();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public static void main(String args[]) {
        new Logotipo();
    }
}

2 Respostas

ViniGodoy

Rode o playLogoMusic numa thread separada, igual você fez com a barra.

DiegoFroes

Muito Obrigado ViniGodoy, fiz o que você me recomendou e deu certinho… Eu estava em dúvida no funcionamento de Threads em modo simultâneo.
Mais uma vez, muito obrigado pela dica…
Abraço!

Criado 13 de janeiro de 2013
Ultima resposta 14 de jan. de 2013
Respostas 2
Participantes 2