Delayed initialization auch für Music Klasse

This commit is contained in:
ngb
2022-07-11 14:41:58 +02:00
parent 855d67c873
commit 5557030e0d

View File

@@ -1,5 +1,7 @@
package schule.ngb.zm.media; package schule.ngb.zm.media;
import schule.ngb.zm.anim.Animation;
import schule.ngb.zm.anim.AnimationListener;
import schule.ngb.zm.events.EventDispatcher; import schule.ngb.zm.events.EventDispatcher;
import schule.ngb.zm.tasks.TaskRunner; import schule.ngb.zm.tasks.TaskRunner;
import schule.ngb.zm.util.Log; import schule.ngb.zm.util.Log;
@@ -56,12 +58,7 @@ public class Music implements Audio {
*/ */
private float volume = 0.8f; private float volume = 0.8f;
EventDispatcher<Audio, AudioListener> events; EventDispatcher<Audio, AudioListener> eventDispatcher;
{
events = new EventDispatcher<>();
events.registerEventType("start", (a,l) -> l.start(a));
events.registerEventType("stop", (a,l) -> l.stop(a));
}
public Music( String source ) { public Music( String source ) {
Validator.requireNotNull(source); Validator.requireNotNull(source);
@@ -72,14 +69,6 @@ public class Music implements Audio {
return audioSource; return audioSource;
} }
public void addListener( AudioListener listener ) {
events.addListener(listener);
}
public void removeListener( AudioListener listener ) {
events.removeListener(listener);
}
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@@ -205,7 +194,7 @@ public class Music implements Audio {
private void stream() { private void stream() {
audioLine.start(); audioLine.start();
playing = true; playing = true;
events.dispatchEvent("start", Music.this); eventDispatcher.dispatchEvent("start", Music.this);
byte[] bytesBuffer = new byte[BUFFER_SIZE]; byte[] bytesBuffer = new byte[BUFFER_SIZE];
int bytesRead = -1; int bytesRead = -1;
@@ -232,7 +221,7 @@ public class Music implements Audio {
playing = false; playing = false;
streamingStopped(); streamingStopped();
events.dispatchEvent("stop", Music.this); eventDispatcher.dispatchEvent("stop", Music.this);
} }
private boolean openLine() { private boolean openLine() {
@@ -286,6 +275,28 @@ public class Music implements Audio {
} }
} }
public void addListener( AudioListener listener ) {
initializeEventDispatcher().addListener(listener);
}
public void removeListener( AudioListener listener ) {
initializeEventDispatcher().removeListener(listener);
}
/**
* Interne Methode, um den Listener-Mechanismus zu initialisieren. Wird erst
* aufgerufen, soblad sich auch ein Listener registrieren möchte.
* @return
*/
private EventDispatcher<Audio, AudioListener> initializeEventDispatcher() {
if( eventDispatcher == null ) {
eventDispatcher = new EventDispatcher<>();
eventDispatcher.registerEventType("start", (a,l) -> l.start(a));
eventDispatcher.registerEventType("stop", (a,l) -> l.stop(a));
}
return eventDispatcher;
}
private static final Log LOG = Log.getLogger(Music.class); private static final Log LOG = Log.getLogger(Music.class);
} }