Aplicação JAVA travando audio

Pessoal, boa tarde!

Tenho uma aplicação JAVA que utiliza a biblioteca timer para verificar alguma mudança nos registros de uma tabela denominada suporte, quando um novo chamado é aberto, essa tabela sofre alteração e um áudio é disparado para alertar os colaboradores da área de infraestrutura.

if(QuantidadeInicial != dao.countAmountSupport()){
            
            if(ManageScreens.get().login().login.getFkAcesso() == 3){
                
                SoundJLayer soundToPlay = new SoundJLayer("audio.mp3");
                soundToPlay.play();
                
                QuantidadeInicial = dao.countAmountSupport();

                    String path = "\\\\X.X.X.X\\sits\\AUDIO\\audio.mp3";
                    File mp3File = new File(path);
                    MP3 musica = new MP3(mp3File);
                    musica.play();

                    ImageIcon icon = new ImageIcon(getClass().getResource("/br/com/sits/icons/help.png"));
                    JOptionPane.showMessageDialog(this, "HELP - Um chamado foi aberto.", "ATENÇÃO", JOptionPane.WARNING_MESSAGE, icon);
                    
                    QuantidadeInicial = dao.countAmountSupport();

                }
                
        }

O código acima está dentro da ação TimerOnTimer e é executada a cada 10s. A aplicação funciona, o problema é que chega um determinado momento o audio para de ser executado, sendo necessário fechar e abrir novamente o sistema para ouvir o áudio novamente. Alguém tem alguma ideia de como ajudar? Pensei em utilizar Threads para gerenciar melhor o áudio, aguardo o retorno de vocês…

Eu deixaria as variáveis soundToPlay e musica como variáveis de instância.
Inicializaria elas no construtor e aí nesse seu código só chamaria o método play() delas.

Realizei a modificação amigo, vou fazer os testes aqui e retorno.

Não surtiu efeito, criei um botão para acionar o áudio e toda vez que esse evento acontece o áudio funciona perfeitamente, agora utilizando essa verificação com o timer, toca algumas vezes e para.

De onde você obteve essas classes SoundJLayer e MP3?
São fontes seus? Caso afirmativo, posta pra gente ver.

Boa tarde!

Encontrei uma .jar chamado Jplayer e efetuei o download para testar, o Código é:

package br.com.sits.tools;

import javazoom.jl.player.advanced.AdvancedPlayer;
import javazoom.jl.player.advanced.PlaybackEvent;
import javazoom.jl.player.advanced.PlaybackListener;

public class SoundJLayer extends PlaybackListener implements Runnable{

private String filePath;
private AdvancedPlayer player;
private Thread playerThread;    

public SoundJLayer(String filePath)
{
    this.filePath = filePath;
}

public void play()
{
    try
    {
        String urlAsString = 
            "file:///" 

// + new java.io.File(".").getCanonicalPath()
+ “\\10.2.20.77\sits\AUDIO”
+ “/”
+ this.filePath;

        System.out.println(urlAsString);

        this.player = new AdvancedPlayer
        (
            new java.net.URL(urlAsString).openStream(),
            javazoom.jl.player.FactoryRegistry.systemRegistry().createAudioDevice()
        );

        this.player.setPlayBackListener(this);

        this.playerThread = new Thread((Runnable) this, "AudioPlayerThread");

        this.playerThread.start();
    }
    catch (Exception ex)
    {
        ex.printStackTrace();
    }
}

// PlaybackListener members

public void playbackStarted(PlaybackEvent playbackEvent)
{
    System.out.println("playbackStarted()");
}

public void playbackFinished(PlaybackEvent playbackEvent)
{
    System.out.println("playbackEnded()");
}    

// Runnable members

public void run()
{
    try
    {
        this.player.play();
    }
    catch (javazoom.jl.decoder.JavaLayerException ex)
    {
        ex.printStackTrace();
    }

}

}

E o código do MP3 é

package br.com.sits.tools;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import javazoom.jl.player.Player;

public class MP3 {
/**

  • Objeto para nosso arquivo MP3 a ser tocado
    /
    private File mp3;
    /
    *
  • Objeto Player da biblioteca jLayer. Ele tocará o arquivo
  • MP3
    /
    private Player player;
    /
    *
  • Construtor que recebe o objeto File referenciando o arquivo
  • MP3 a ser tocado e atribui ao atributo MP3 da classe.
  • @param mp3
    */
    public MP3(File mp3) {
    this.mp3 = mp3;
    }
public MP3() {
}

/**

  • Método que toca o MP3
    */

public void play() {

  try {
      
      
            String path = "\\\\10.2.20.77\\sits\\AUDIO\\audio.mp3";
            File mp3File = new File(path);
            SoundJLayer soundToPlay = new SoundJLayer("audio.mp3");
            MP3 musica = new MP3(mp3File);
      
            FileInputStream fis     = new FileInputStream(mp3);
            BufferedInputStream bis = new BufferedInputStream(fis);
            this.player = new Player(bis);
            System.out.println("Tocando!");
            this.player.play();
            System.out.println("Terminado!");
        }
        catch (Exception e) {
            System.out.println("Problema ao tocar " + mp3);
            e.printStackTrace();
        }

}

}

E o audio é executado dentro desse código a cada 10s.

private void timerOnTime(java.awt.event.ActionEvent evt) {

    if(QuantidadeInicial != dao.countAmountSupport()){
        
        if(ManageScreens.get().login().login.getFkAcesso() == 3){
            
            
            QuantidadeInicial = dao.countAmountSupport();

                mp3.play();
                ImageIcon icon = new ImageIcon(getClass().getResource("/br/com/sits/icons/help.png"));
                JOptionPane.showMessageDialog(this, "HELP - Um chamado foi aberto.", "ATENÇÃO", JOptionPane.WARNING_MESSAGE, icon);
                
                QuantidadeInicial = dao.countAmountSupport();

            }
            
    }
    
}