Hasta ahí todo funciona correctamente, el problema viene cuando hago dos clicks de ratón muy seguidos, entonces solamente reproduce el fichero la primera vez, y no responde correctamente a todos los clicks de ratón que hago. ¿Cómo lo puedo solucionar?
Aquí pongo un fragmento de código por si puede ayudar en algo:
Cita:
/*Clase MouseListener: */
class MouseListener extends MouseAdapter implements MouseMotionListener{
public void mouseClicked(MouseEvent e){
if (e.getButton() == e.BUTTON1){
System.out.println("Se ha pulsado el botón 1");
Main.getSoundCache().playSound("Bombo.wav");
}
}
/*El método que usamos del Main:*/
public class Main{
private static SoundCache soundCache;
public Main(){
soundCache = new SoundCache();
[...]
}
public static SoundCache getSoundCache(){
return soundCache;
}
/*El método que usamos de la clase SoundCache:*/
public class SoundCache extends ResourceCache{
public AudioClip getAudioClip(String name){
return (AudioClip) getResource(name);
}
public void playSound(final String name){
new Thread(
new Runnable(){
public void run(){
getAudioClip(name).play();
}
}
).start();
}
}
/*Finalmente, la clase padre de la que hereda SoundCache:*/
public abstract class ResourceCache {
protected HashMap resources;
public ResourceCache(){
resources = new HashMap();
}
protected Object loadResource(String name){
URL url = null;
url = getClass().getClassLoader().getResource(name);
return loadResource(url);
}
protected abstract Object loadResource(URL url);
protected Object getResource(String name){
Object res = resources.get(name);
if(res == null){
res = loadResource("res/"+name);
resources.put(name, res);
}
return res;
}
}
Este mismo código me ha resultado efectivo en otras ocasiones, pero no en esta, puesto que no me reproduce 2 veces simultáneas el mismo archivo de sonido, ya que espera a que termine la primera reproducción para empezar la segunda./*Clase MouseListener: */
class MouseListener extends MouseAdapter implements MouseMotionListener{
public void mouseClicked(MouseEvent e){
if (e.getButton() == e.BUTTON1){
System.out.println("Se ha pulsado el botón 1");
Main.getSoundCache().playSound("Bombo.wav");
}
}
/*El método que usamos del Main:*/
public class Main{
private static SoundCache soundCache;
public Main(){
soundCache = new SoundCache();
[...]
}
public static SoundCache getSoundCache(){
return soundCache;
}
/*El método que usamos de la clase SoundCache:*/
public class SoundCache extends ResourceCache{
public AudioClip getAudioClip(String name){
return (AudioClip) getResource(name);
}
public void playSound(final String name){
new Thread(
new Runnable(){
public void run(){
getAudioClip(name).play();
}
}
).start();
}
}
/*Finalmente, la clase padre de la que hereda SoundCache:*/
public abstract class ResourceCache {
protected HashMap resources;
public ResourceCache(){
resources = new HashMap();
}
protected Object loadResource(String name){
URL url = null;
url = getClass().getClassLoader().getResource(name);
return loadResource(url);
}
protected abstract Object loadResource(URL url);
protected Object getResource(String name){
Object res = resources.get(name);
if(res == null){
res = loadResource("res/"+name);
resources.put(name, res);
}
return res;
}
}
¿Qué puedo hacer?
Un saludo y muchas gracias!!
Gonzalo.