Hi
Ich habe eine Klasse Record. Sie implementiert Runnable.
Ich habe eine Klasse Main. Sie implementiert einen KeyListener.
Ablauf:
ich initialisiere ein Objekt von Record (da werden nurn paar Einstellungen gemacht). ich drücke eine Taste. In der keyPressed-Methode wird jetzt startRecording() am Record-objekt aufgerufen. diese methode macht weitere einstellungen und führt start() aus - ein neuer Thread wird gestartet, der die Aufnahme durchführt. Irgendwann drückt der nutzer eine taste. diese setzt im aufzeichnenden Record-objekt eine boolean-variable auf false, was das beenden der aufnahme verursacht. datei wird dabei geschieben und der vormals gestartete thread beendet (habs in netbeans gedebuggt, er ist aus der liste verschwunden).
soweit so gut, das funktioniert.
wenn ich jetzt wieder die aufnahmetaste drücke, wird wieder startrecord ausgeführt, einstellungen gemacht und start() ausgeführt. nur diesmal fliegt eine IllegalThreadStateException.
Ist es nicht genug, dass der vormals gestartete thread korrekt beendet ist? wo liegt das problem?
Ich habe eine Klasse Record. Sie implementiert Runnable.
Ich habe eine Klasse Main. Sie implementiert einen KeyListener.
Ablauf:
ich initialisiere ein Objekt von Record (da werden nurn paar Einstellungen gemacht). ich drücke eine Taste. In der keyPressed-Methode wird jetzt startRecording() am Record-objekt aufgerufen. diese methode macht weitere einstellungen und führt start() aus - ein neuer Thread wird gestartet, der die Aufnahme durchführt. Irgendwann drückt der nutzer eine taste. diese setzt im aufzeichnenden Record-objekt eine boolean-variable auf false, was das beenden der aufnahme verursacht. datei wird dabei geschieben und der vormals gestartete thread beendet (habs in netbeans gedebuggt, er ist aus der liste verschwunden).
soweit so gut, das funktioniert.
wenn ich jetzt wieder die aufnahmetaste drücke, wird wieder startrecord ausgeführt, einstellungen gemacht und start() ausgeführt. nur diesmal fliegt eine IllegalThreadStateException.
Ist es nicht genug, dass der vormals gestartete thread korrekt beendet ist? wo liegt das problem?
Java:
public class Recorder implements Runnable
{
private boolean recording;
public void startRecording()
{
//paar vars setzen
recording=true;
start();
}
public void run()
{
//aufnahme... solange recording == true
}
}
public class Main implements GlobalKeyListener
{
private Record rec;
public void keyPressed(GlobalKeyEvent gke)
{
Settings s = Settings.getInstance();
if(gke.getConverted().equals(s.get("Remote", "Stop")))
rec.stopRecording(); //setzt recording auf false
if(gke.getConverted().toLowerCase().equals("r") )
{
if(!rec.isRecording())
try
{
rec.startRecording();
}
catch(Exception ex)
{
Logger.add(ex);
}
}
}
}