Problemas MP3SPI

soccooorroooo…
eu to com esse programa aqui

[code]import javax.sound.sampled.;
import java.io.
;
import java.util.Map;
import org.tritonus.share.sampled.file.TAudioFileFormat;

public class Ler extends javax.swing.JFrame {

SourceDataLine line;

/** Creates new form NewJFrame */
public Ler() {
initComponents();
}
                    
private void initComponents() {

    jButton1 = new javax.swing.JButton();
    jButton2 = new javax.swing.JButton();
    jLabel1 = new javax.swing.JLabel();
    jLabel2 = new javax.swing.JLabel();
    jLabel3 = new javax.swing.JLabel();

    setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

    jButton1.setText("START");
    jButton1.addActionListener(new java.awt.event.ActionListener() {
        public void actionPerformed(java.awt.event.ActionEvent evt) {
            jButton1ActionPerformed(evt);
        }
    });

    jButton2.setText("jButton2");

    jLabel1.setText("jLabel1");

    jLabel2.setText("jLabel2");

    jLabel3.setText("jLabel3");

    javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
    getContentPane().setLayout(layout);
    layout.setHorizontalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                .addGroup(layout.createSequentialGroup()
                    .addGap(85, 85, 85)
                    .addComponent(jButton1)
                    .addGap(60, 60, 60)
                    .addComponent(jButton2))
                .addGroup(layout.createSequentialGroup()
                    .addGap(156, 156, 156)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                        .addComponent(jLabel2)
                        .addComponent(jLabel1)
                        .addComponent(jLabel3))))
            .addContainerGap(117, Short.MAX_VALUE))
    );
    layout.setVerticalGroup(
        layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
        .addGroup(layout.createSequentialGroup()
            .addGap(123, 123, 123)
            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                .addComponent(jButton1)
                .addComponent(jButton2))
            .addGap(18, 18, 18)
            .addComponent(jLabel1)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(jLabel2)
            .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
            .addComponent(jLabel3)
            .addContainerGap(82, Short.MAX_VALUE))
    );

    pack();
}// </editor-fold>                        
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
try {
    File file = new File("C:\Users\Jonnathan\Documents\NetBeansProjects\JavaApplication2\src\javaapplication2\musica.mp3");
    // Play now.
    AudioFileFormat baseFileFormat = null;
    AudioFormat baseFormat2;
    baseFileFormat = AudioSystem.getAudioFileFormat(file);
    baseFormat2 = baseFileFormat.getFormat();
    if (baseFileFormat instanceof TAudioFileFormat) {
	Map properties = ((TAudioFileFormat) baseFileFormat).properties();
	String titulo = (String) properties.get("title");
	jLabel1.setText("Nome: " + titulo);
	Long duracao = (Long) properties.get("duration");
	jLabel2.setText("" + ((duracao / 1000000) / 60) + " minutos e " + ((duracao / 1000000) % 60) + " segundos");
    }
    AudioInputStream in = AudioSystem.getAudioInputStream(file);
    AudioInputStream din = null;
    AudioFormat baseFormat = in.getFormat();
    AudioFormat decodedFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
	    baseFormat.getSampleRate(),
	    16,
	    baseFormat.getChannels(),
	    baseFormat.getChannels() * 2,
	    baseFormat.getSampleRate(),
	    false);
    din = AudioSystem.getAudioInputStream(decodedFormat, in);
    // Play now.
    rawplay(decodedFormat, din);
    in.close();
} catch (Exception e) {

}
}                                        

private void rawplay(AudioFormat targetFormat, AudioInputStream din) throws IOException, LineUnavailableException {
byte[] data = new byte[4096];
line = getLine(targetFormat);
if (line != null) {
    // Start
    line.start();
    int nBytesRead = 0, nBytesWritten = 0;
    while (nBytesRead != 1) {
	nBytesRead = din.read(data, 0, data.length);
	if (nBytesRead != 1) {
	    nBytesWritten = line.write(data, 0, nBytesRead);
	    jButton1.setText("oi");
	}
    }
    // Stop
    line.drain();
    line.stop();
    line.close();
    din.close();
}
}

private SourceDataLine getLine(AudioFormat audioFormat) throws LineUnavailableException {
SourceDataLine res = null;
DataLine.Info info = new DataLine.Info(SourceDataLine.class, audioFormat);
res = (SourceDataLine) AudioSystem.getLine(info);
res.open(audioFormat);
return res;
}

public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {

    public void run() {
	new Ler().setVisible(true);
    }
});
}
// Variables declaration - do not modify                     
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton2;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
// End of variables declaration                   

}
[/code]

ele executa normal, sendo que quando a musica começa a ser tocada, o programa fica como se tivesse desabilitado, e nao da pra fazer nada…

o que eu posso fazer?
tnks

Você poderia criar uma classe separada para tocar os arquivos MP3 usando thread, ai quando você estarta a thread a tela fica livre para você poder mexer.