From 5557030e0d1d1d88e323437dbcda7539efedd8b2 Mon Sep 17 00:00:00 2001 From: "J. Neugebauer" Date: Mon, 11 Jul 2022 14:41:58 +0200 Subject: [PATCH] =?UTF-8?q?Delayed=20initialization=20auch=20f=C3=BCr=20Mu?= =?UTF-8?q?sic=20Klasse?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/schule/ngb/zm/media/Music.java | 43 ++++++++++++-------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/src/main/java/schule/ngb/zm/media/Music.java b/src/main/java/schule/ngb/zm/media/Music.java index 7b2fb73..1bd5640 100644 --- a/src/main/java/schule/ngb/zm/media/Music.java +++ b/src/main/java/schule/ngb/zm/media/Music.java @@ -1,5 +1,7 @@ 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.tasks.TaskRunner; import schule.ngb.zm.util.Log; @@ -56,12 +58,7 @@ public class Music implements Audio { */ private float volume = 0.8f; - EventDispatcher events; - { - events = new EventDispatcher<>(); - events.registerEventType("start", (a,l) -> l.start(a)); - events.registerEventType("stop", (a,l) -> l.stop(a)); - } + EventDispatcher eventDispatcher; public Music( String source ) { Validator.requireNotNull(source); @@ -72,14 +69,6 @@ public class Music implements Audio { return audioSource; } - public void addListener( AudioListener listener ) { - events.addListener(listener); - } - - public void removeListener( AudioListener listener ) { - events.removeListener(listener); - } - /** * {@inheritDoc} */ @@ -205,7 +194,7 @@ public class Music implements Audio { private void stream() { audioLine.start(); playing = true; - events.dispatchEvent("start", Music.this); + eventDispatcher.dispatchEvent("start", Music.this); byte[] bytesBuffer = new byte[BUFFER_SIZE]; int bytesRead = -1; @@ -232,7 +221,7 @@ public class Music implements Audio { playing = false; streamingStopped(); - events.dispatchEvent("stop", Music.this); + eventDispatcher.dispatchEvent("stop", Music.this); } 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 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); }