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