JLayer Problem

dodlhuat

Mitglied
Ich hab ein kleines Programm geschrieben in dem per Button Klick eine mp3 Datei abgespielt werden soll.
Habe das anfänglich mit jmf probiert und bin jetzt bei jlayer gelandet. Das funktioniert so weit auch ganz gut, aber macht folgendes Problem. In meinem Programm sind 5 Buttons die jeder eine andere Datei abspielen. Nur wenn ich eine starte, werden alle Buttons blockiert bis das File fertig abgespielt ist.
Hier mal der Code des Players:
Code:
import java.io.*;

import javazoom.jl.player.*;
import javazoom.jl.decoder.*;

	public class AudioPlayer {
		
		FileInputStream in = null;
		Player p = null;

		public AudioPlayer() {
			
		}
		
		void startPlayer() {
			if (p != null) {
				p.close();
			}
			try {
				p = new Player(in);
				p.play();
			} catch (JavaLayerException jle) {
				System.err.println ("Error: " + jle); 
			}
		}
		
		void changeFile(String dateiname) {
			try {
				in = new FileInputStream(new File("audio", dateiname+".mp3"));
			} catch (FileNotFoundException fnf) {
				System.err.println ("Error: " + fnf);
			}
		}
}

und jeder Button führt bei Klick folgendes aus:

Code:
ap.changeFile(datei);
ap.startPlayer();

Kann mir einer sagen wo da mein Fehler liegt...
Danke schonmal...
 
Moin,

interessanter wäre vermutlich der Codeteil wo Du "ap.startPlayer()" aufrufst ! !

Kannst Du denn irgendwas anderes im Fenster mit den Button machen ? ?
So aus dem Bauch heraus vermute ich mal, dass sich Dein Player wie ein modaler Dialog verhält (!)

Gruß
Klaus
 
Moin,

interessanter wäre vermutlich der Codeteil wo Du "ap.startPlayer()" aufrufst ! !

Kannst Du denn irgendwas anderes im Fenster mit den Button machen ? ?
So aus dem Bauch heraus vermute ich mal, dass sich Dein Player wie ein modaler Dialog verhält (!)

Gruß
Klaus

Ich hab einen ActionListener auf allen Buttons der beim Klick den Player startet:
Code:
button_1_Play.addActionListener(new java.awt.event.ActionListener() {
				public void actionPerformed(java.awt.event.ActionEvent e) {
					ap.changeFile(datei);
		                        ap.startPlayer();
				}
			});

Und das Fenster ist komplett blockiert, kann es nicht mal schließen solang das Audiofile läuft.

Wie krieg ich das dann hin das die Buttons nicht blockiert werden? Habe vorher die Wiedergabe mittels dem jmf gelöst gehabt, da hats das Problem nicht gegeben, mir ist nur nicht klar was ich dieses mal anders gemacht habe.
 
Moin,

also ich kenne diesen JLayer nicht, aber wie ich schon schrieb, klingt es ganz danach, dass er in einem modalen Modus geöffnet wird.

Da wirst Du kaum eine Chance haben ... kannst theoretisch ja mal versuchen, ihn in einen neuen Frame Deines Progs einzubinden, falls das geht!

Gruß
Klaus
 
Falls kein Dialog modaler Natur gestartet werden sollte, denke ich liegt es daran das die Musik im Event-Thread abgespielt wird. Lösung: lege es in einen anderen Thread.

Um zu schauen in welchem Thread es liegt bemühe mal die Threadliste in einem debugger (z.B. den von Eclipse)
 
Falls kein Dialog modaler Natur gestartet werden sollte, denke ich liegt es daran das die Musik im Event-Thread abgespielt wird. Lösung: lege es in einen anderen Thread.

Um zu schauen in welchem Thread es liegt bemühe mal die Threadliste in einem debugger (z.B. den von Eclipse)

Danke, habe es jetzt in einem anderen Thread, und jetzt passt alles!
 
Hi, ich habe grade das gleiche Problem, kenne mich aber mit java nicht so gut aus. Kannst du mir vielleicht beschreiben, wie man das in einem anderen thread startet?
 

Neue Beiträge

Zurück