# DataLine not supported nach 20 Minuten



## mayewski (23. Dez 2011)

Hallo,

ich habe ein kleines Problem mit dem Sound bei Java.
Ich frage in einer Endlosschleife den Soundeingang ab und führe gegebenenfalls eine Methode aus.
Dies funktioniert auch alles, aber nur maximal 20 Minuten lang.
Nach immer 1219 Sekunden, also 20 Minuten und 19 Sekunden wird die DataLine nicht mehr unterstützt.

Hier ein Code-Ausschnitt


```
AudioFormat format = new AudioFormat(8000.0F,8,1,true, false);
TargetDataLine line;
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
if (!AudioSystem.isLineSupported(info)) {
	//true nach 1219 Sekunden
}
try {
	line = (TargetDataLine) AudioSystem.getLine(info);
	line.open(format);
	ByteArrayOutputStream out  = new ByteArrayOutputStream();
	int numBytesRead;
        byte[] data = new byte[182];
	// ....
	 return 1;
	}
catch (...) {
 //...
}
```

Wie gesagt, es funktioniert 20 Minuten lang, dann nicht mehr.
Danach muss ich das Programm neu starten, damit es wieder geht. Nur ein neu erstellen der Klasse reicht nicht aus.


----------



## Marco13 (24. Dez 2011)

Schwer zu sagen, habe mit Sound noch nicht viel gemacht, aber ... den Symptomen nach klingt es, als würde da irgendein Buffer vollaufen...Gibt's da ein KSKB dazu?


----------



## mayewski (24. Dez 2011)

Auf einem anderen PC funktioniert es ohne Probleme. Also wird ein KSKB wohl nichts bringen?

Der Problem-PC:
Kleiner Linux Server (Dockstar)
Debian Lenny
1,2 GHz
128 MB Arbeitsspeicher + Swap File
256MB internen NAND Speicher + 16GB USB-Stick

Vorhin habe ich das Programm mit Screen fünfmal gleichzeitig laufen lassen.
Gleiches Ergebnis: nach ~20 min kommt der Fehler.


----------



## Marco13 (24. Dez 2011)

Vielleicht hat jemand anderes da noch ... "gezieltere" Ideen dazu, aber ... ich könnte da jetzt auch nur im Trüben stochern. Was passiert z.B., wenn du die Größe dieses Buffers erhöhst, von 182 auf 182*2 oder so? Ich sehe im Moment keine andere Möglichkeit, das ganze als "Black Box" anzusehen, und durch Änderungen der Eingabe/des Programms zu versuchen, Rückschlüsse auf die mögliche Ursache zu ziehen...


----------



## mayewski (24. Dez 2011)

Marco13 hat gesagt.:


> Was passiert z.B., wenn du die Größe dieses Buffers erhöhst, von 182 auf 182*2?



Gleicher Fehler nach 39 Minuten.
Mit new byte[182] ging die Berechnung ca. 2,5 Sekunden mit new byte[364] nun 5 Sekunden.
Also nach knapp über 500 Schleifendurchläufen kommt der Fehler.

Edit:

Ich habe gerade die Berechnung sehr stark vereinfacht. Beobachtung: Nach 506 Schleifendurchläufen kommt der Fehler.


----------



## Marco13 (25. Dez 2011)

Rufst du auch überall mal 'close' auf?


----------



## mayewski (25. Dez 2011)

Marco13 hat gesagt.:


> Rufst du auch überall mal 'close' auf?



Ok, peinlich 

close() wurde nur aufgerufen, wenn eine Bedingung zutrifft.
Das war nicht der Fall...

Vielen Dank für deine Hilfe.


----------

