GUI friert ein beim abspielen einer Datei

Nick0110

Grünschnabel
Hi,

ich hab das Problem dass wenn ich eine wav datei abspiele mir die GUI einfriert. So dass ich nicht mehr die Möglichkeit habe das abspielen zu stoppen. Mir ist bewusst, dass ich das ganze mit einem Thread lösen könnte, aber das genaue wie bereitet mir noch probleme.
Die Methode die meinen Player aufruft sieht folgendermaßen aus

Code:
                 if(label.equals("play")){
			
			player = new Player();
			player.start();
		}
		if (label.equals("stop")){
		
			player.playerStop();
			player = null;
		}

Die Klasse Player sieht so aus

Code:
public class Player extends Thread{
	
	private AudioInputStream in = null;
	private SourceDataLine line = null;
	
	public Player(){
		try{
			in = AudioSystem.getAudioInputStream(new URL(MainFrame.path));
			}catch (Exception d){
				d.printStackTrace();
			}
			

	AudioFormat format = in.getFormat();
	DataLine.Info info = new DataLine.Info(SourceDataLine.class,format);
	try {
		line = (SourceDataLine)AudioSystem.getLine(info);
		line.open(format);
		}catch (Exception e) {
		System.exit(-2);
		}
	}
	
		
	
	public void start(){
		int readBytes =0;
		byte[] data = new byte[10000];
		line.start();
		
		do{
			try {
			readBytes = in.read(data,0,data.length);
		}catch (Exception e){
			System.exit(-3);
			}
		if (readBytes!=-1) line.write(data, 0, readBytes);
		} while (readBytes != -1);
		//line.drain();
	}
	
	public void playerStop(){
		line.close();
	}
	
	
}

Wie kann ich es hinbekommen dass trotz spielen einer Datei, ich weiterhin auf andere Elemente in meiner GUI zugreifen kann.
Danke schon mal im Voraus.

Grüße
Nick
 
Hallo,

du hast zwar deine Player-Klasse von der Klasse Thread abgeleitet, aber du musst dann die Methode
Code:
public void run()
schreiben. Dadrin wird dann deine Logik ausgeführt. Du darfst auch keine Methode start() haben weil du so die Methode aus der Klasse Thread überschreibst.
Mein Vorschlag wäre, benenne deine start()-Methode einfach in run um. Mehr brauchst du nicht zu tun. Du brauchst auch den Aufruf nicht zu verändern. Dann müsste es funktionieren.

MFG zEriX
 
Zurück