2010-10-24 6 views
1

J'utilise une application Java (Netbeans) sur Ubuntu 10.10. Le code suivant lit le son correctement les deux premières fois qu'il est appelé. Sur la troisième invocation, l'application se bloque et je dois tuer le processus. Des idées?Java clip.play se bloque sur la 3ème invocation

try { 
     String path = ApplicationContext.getInstance().getAppDirectory(); 
     java.net.URL url = new java.net.URL("file:"+path+"my.wav"); 
     java.applet.AudioClip clip = java.applet.Applet.newAudioClip(url); 
     clip.play(); 
    }catch (java.net.MalformedURLException malex){ 
     Logger.log(malex); 
    } 

Aucune exception ou erreur n'est signalée.

+0

sont les trois invocations ouvrant le même fichier? –

+0

Oui, les trois invocations exécutent exactement les lignes de code collées ci-dessus. Le fichier et le chemin ne changent pas. Pour info, le clip sonore dure 1,5 secondes. Les invocations peuvent se produire à environ 5 à 10 secondes d'intervalle. – MountainX

+0

@ user463994 Exécutez-le en tant qu'application autonome et, lorsqu'il se bloque, lancez jstack dessus: http://download.oracle.com/javase/1.5.0/docs/tooldocs/share/jstack.html (jstack process-id) Recherchez la trace de pile qui contient l'appel de la méthode contenant le code que vous avez collé. La trace de la pile vous indiquera la méthode sur laquelle votre code est accroché. –

Répondre

0

le débogage avec strace devenait vraiment complexe. J'ai fini par prendre la voie facile. Voici ma solution:

java.io.InputStream in = new java.io.FileInputStream(path+"my.wav"); 
sun.audio.AudioStream as = new sun.audio.AudioStream(in); 
sun.audio.AudioPlayer.player.start(as); 

Malheureusement, c'est pas une bonne solution car: avertissement: sun.audio.AudioStream est API propriétaire interne et peut être supprimée dans une version future.