Ajuda com Java
Olá preciso da ajuda de vocês, fiz um programa e preciso que quando eu clique no botao reproduza uma musica, isso consegui fazer porem, se eu clicar mais de uma vez rapidamente no botao de play ou resume ele toca a musica embolado, como resolvo isso?
package prejarvis;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
/**
*
* @author Rodrigo Costa
*/
public class Musica {
FileInputStream FIS;
BufferedInputStream BIS;
public long pauseLocation;
public long songTotalLength;
public String fileLocation;
boolean tocando = false;
public Player player;
public void play(String path){
if(tocando == false){
try {
FIS = new FileInputStream(path);
BIS = new BufferedInputStream(FIS);
player = new Player(BIS);
songTotalLength = FIS.available();
fileLocation = path + "";
} catch (FileNotFoundException | JavaLayerException ex) {
} catch(Exception ex){
}
new Thread(){
@Override
public void run(){
try {
player.play();
} catch (JavaLayerException ex) {
}
}
}.start();
}else{
}
}
public void resume(){
try {
FIS = new FileInputStream(fileLocation);
BIS = new BufferedInputStream(FIS);
player = new Player(BIS);
FIS.skip(songTotalLength - pauseLocation);
} catch (FileNotFoundException |JavaLayerException ex) {
} catch (IOException ex) {
}
new Thread(){
@Override
public void run(){
try {
player.play();
} catch (JavaLayerException ex) {
}
}
}.start();
}
public void pause(){
if (player != null) {
try {
pauseLocation = FIS.available();
player.close();
} catch (IOException ex) {
}
} else {
}
}
public void stop(){
if (player != null) {
player.close();
} else {
}
}
}
package prejarvis;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
/**
*
* @author Rodrigo Costa
*/
public class Musica {
FileInputStream FIS;
BufferedInputStream BIS;
public long pauseLocation;
public long songTotalLength;
public String fileLocation;
boolean tocando = false;
public Player player;
public void play(String path){
if(tocando == false){
try {
FIS = new FileInputStream(path);
BIS = new BufferedInputStream(FIS);
player = new Player(BIS);
songTotalLength = FIS.available();
fileLocation = path + "";
} catch (FileNotFoundException | JavaLayerException ex) {
} catch(Exception ex){
}
new Thread(){
@Override
public void run(){
try {
player.play();
} catch (JavaLayerException ex) {
}
}
}.start();
}else{
}
}
public void resume(){
try {
FIS = new FileInputStream(fileLocation);
BIS = new BufferedInputStream(FIS);
player = new Player(BIS);
FIS.skip(songTotalLength - pauseLocation);
} catch (FileNotFoundException |JavaLayerException ex) {
} catch (IOException ex) {
}
new Thread(){
@Override
public void run(){
try {
player.play();
} catch (JavaLayerException ex) {
}
}
}.start();
}
public void pause(){
if (player != null) {
try {
pauseLocation = FIS.available();
player.close();
} catch (IOException ex) {
}
} else {
}
}
public void stop(){
if (player != null) {
player.close();
} else {
}
}
}
Rodrigo Costa
Curtidas 0
Respostas
Santos
10/08/2017
Opa Rodrigo. Beleza?
Cara, provavelmente está ocorrendo de que quando você clica no botão play uma outra vez, a música começa a tocar novamente sem a outra parar.
O que você pode fazer é verificar se o play já foi clicado (utilizando uma variável) e se clicar novamente, você pause a música.
Aí você evita esse conflito dos áudios tocando simultaneamente.
Abraços!
Cara, provavelmente está ocorrendo de que quando você clica no botão play uma outra vez, a música começa a tocar novamente sem a outra parar.
O que você pode fazer é verificar se o play já foi clicado (utilizando uma variável) e se clicar novamente, você pause a música.
Aí você evita esse conflito dos áudios tocando simultaneamente.
Abraços!
GOSTEI 0
Rodrigo Costa
10/08/2017
vc fala pra eu clicar um metodo no caso? poderia me exemplificar algo?
GOSTEI 0
Rodrigo Costa
10/08/2017
por exemplo eu fiz essa alteração, resolveu a parte de tocar as duas, ai a depois que ele retorna o primeiro true ele nao reproduz mais, eu tenho que criar um metodo?
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package prejarvis;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
/**
*
* @author Rodrigo Costa
*/
public class Musica {
FileInputStream FIS;
BufferedInputStream BIS;
public long pauseLocation;
public long songTotalLength;
public String fileLocation;
boolean tocando = false;
public Player player;
//aqui foi feita a alteração que está citada acima
public boolean play(String path){
if(tocando == false){
try {
FIS = new FileInputStream(path);
BIS = new BufferedInputStream(FIS);
player = new Player(BIS);
songTotalLength = FIS.available();
fileLocation = path + "";
} catch (FileNotFoundException | JavaLayerException ex) {
} catch(Exception ex){
}
new Thread(){
@Override
public void run(){
try {
player.play();
} catch (JavaLayerException ex) {
}
}
}.start();
}else{
}
return tocando = true;
}
public void resume(){
try {
FIS = new FileInputStream(fileLocation);
BIS = new BufferedInputStream(FIS);
player = new Player(BIS);
FIS.skip(songTotalLength - pauseLocation);
} catch (FileNotFoundException |JavaLayerException ex) {
} catch (IOException ex) {
}
new Thread(){
@Override
public void run(){
try {
player.play();
} catch (JavaLayerException ex) {
}
}
}.start();
}
public void pause(){
if (player != null) {
try {
pauseLocation = FIS.available();
player.close();
} catch (IOException ex) {
}
} else {
}
}
public void stop(){
if (player != null) {
player.close();
} else {
}
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package prejarvis;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
/**
*
* @author Rodrigo Costa
*/
public class Musica {
FileInputStream FIS;
BufferedInputStream BIS;
public long pauseLocation;
public long songTotalLength;
public String fileLocation;
boolean tocando = false;
public Player player;
//aqui foi feita a alteração que está citada acima
public boolean play(String path){
if(tocando == false){
try {
FIS = new FileInputStream(path);
BIS = new BufferedInputStream(FIS);
player = new Player(BIS);
songTotalLength = FIS.available();
fileLocation = path + "";
} catch (FileNotFoundException | JavaLayerException ex) {
} catch(Exception ex){
}
new Thread(){
@Override
public void run(){
try {
player.play();
} catch (JavaLayerException ex) {
}
}
}.start();
}else{
}
return tocando = true;
}
public void resume(){
try {
FIS = new FileInputStream(fileLocation);
BIS = new BufferedInputStream(FIS);
player = new Player(BIS);
FIS.skip(songTotalLength - pauseLocation);
} catch (FileNotFoundException |JavaLayerException ex) {
} catch (IOException ex) {
}
new Thread(){
@Override
public void run(){
try {
player.play();
} catch (JavaLayerException ex) {
}
}
}.start();
}
public void pause(){
if (player != null) {
try {
pauseLocation = FIS.available();
player.close();
} catch (IOException ex) {
}
} else {
}
}
public void stop(){
if (player != null) {
player.close();
} else {
}
}
}
GOSTEI 0
Estevão Dias
10/08/2017
Fala Rodrigo, tudo bem?
Eu separaria os métodos sim. No método tocar você pode iniciar a leitura e o buffer e atribuir true a tocando. No método parar você pode limpar o buffer e atribuir false a tocando. No método tocando você apenas retorna o valor da variável, sendo este um ponto comum para identificar se algo está em execução. No botão play, primeiro você checa se está tocando e para, depois toca, se não apenas toca. No pause verifica se está tocando, se não retorna, caso contrário para. Blz?
Um abraço.
Eu separaria os métodos sim. No método tocar você pode iniciar a leitura e o buffer e atribuir true a tocando. No método parar você pode limpar o buffer e atribuir false a tocando. No método tocando você apenas retorna o valor da variável, sendo este um ponto comum para identificar se algo está em execução. No botão play, primeiro você checa se está tocando e para, depois toca, se não apenas toca. No pause verifica se está tocando, se não retorna, caso contrário para. Blz?
Um abraço.
GOSTEI 0
Rodrigo Costa
10/08/2017
como faço pra limpar o buffer? poderia me dar um exemplo?
GOSTEI 0
Rodrigo Costa
10/08/2017
é que ainda sou um programador novato kkkk, faz uns 6 meses que programo e gostaria de saber se pode me mostrar como limpar o buffer
GOSTEI 0
Rodrigo Costa
10/08/2017
gente nao encontro nada na internet sobre limpar o buffer podem me mostrar como?
GOSTEI 0
Rodrigo Costa
10/08/2017
Galera valeu pela ajuda segue aqui o código corrigido, fiz o seguinte: criei um if pra cada botao e para o play e para o resume a codição seria se o metodo tocando fosse false
package prejarvis;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
/**
*
* @author Rodrigo Costa
*/
public class Musica {
FileInputStream FIS;
BufferedInputStream BIS;
public long pauseLocation;
public long songTotalLength;
public String fileLocation;
boolean tocando;
public Player player;
public boolean play(String path){
if(tocando == false){
try {
FIS = new FileInputStream(path);
BIS = new BufferedInputStream(FIS);
player = new Player(BIS);
songTotalLength = FIS.available();
fileLocation = path + "";
} catch (FileNotFoundException | JavaLayerException ex) {
} catch(Exception
ex){
}
new Thread(){
@Override
public void run(){
try {
player.play();
} catch (JavaLayerException ex) {
}
}
}.start();
}else{
}
return tocando = true;
}
public boolean resume(){
if (tocando == false) {
try {
FIS = new FileInputStream(fileLocation);
BIS = new BufferedInputStream(FIS);
player = new Player(BIS);
FIS.skip(songTotalLength - pauseLocation);
} catch (FileNotFoundException |JavaLayerException ex) {
} catch (IOException ex) {
}
new Thread(){
@Override
public void run(){
try {
player.play();
} catch (JavaLayerException ex) {
}
}
}.start();
} else {
}
return tocando = true;
}
public boolean pause(){
if (player != null) {
try {
pauseLocation = FIS.available();
player.close();
} catch (IOException ex) {
}
} else {
}
return tocando = false;
}
}
package prejarvis;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
/**
*
* @author Rodrigo Costa
*/
public class Musica {
FileInputStream FIS;
BufferedInputStream BIS;
public long pauseLocation;
public long songTotalLength;
public String fileLocation;
boolean tocando;
public Player player;
public boolean play(String path){
if(tocando == false){
try {
FIS = new FileInputStream(path);
BIS = new BufferedInputStream(FIS);
player = new Player(BIS);
songTotalLength = FIS.available();
fileLocation = path + "";
} catch (FileNotFoundException | JavaLayerException ex) {
} catch(Exception
ex){
}
new Thread(){
@Override
public void run(){
try {
player.play();
} catch (JavaLayerException ex) {
}
}
}.start();
}else{
}
return tocando = true;
}
public boolean resume(){
if (tocando == false) {
try {
FIS = new FileInputStream(fileLocation);
BIS = new BufferedInputStream(FIS);
player = new Player(BIS);
FIS.skip(songTotalLength - pauseLocation);
} catch (FileNotFoundException |JavaLayerException ex) {
} catch (IOException ex) {
}
new Thread(){
@Override
public void run(){
try {
player.play();
} catch (JavaLayerException ex) {
}
}
}.start();
} else {
}
return tocando = true;
}
public boolean pause(){
if (player != null) {
try {
pauseLocation = FIS.available();
player.close();
} catch (IOException ex) {
}
} else {
}
return tocando = false;
}
}
GOSTEI 0