From 764a486362d1b74968779fdb832e157f795c6a0a Mon Sep 17 00:00:00 2001 From: jg175 <jg175@hdm-stuttgart.de> Date: Wed, 31 Jan 2024 18:22:11 +0100 Subject: [PATCH] HOTFIX: Programm was still running, after its being closed --- .../Controller/MainMenuController.java | 3 +++ .../battlearena/Main/Driver.java | 5 ++++ .../battlearena/Model/Sound/MusicPlayer.java | 5 +++- .../battlearena/Model/Sound/MusicType.java | 16 ------------ src/main/resources/player/appSettings.json | 4 +-- src/test/java/MusicPlayerTest.java | 26 +++++++++++++++++++ 6 files changed, 40 insertions(+), 19 deletions(-) delete mode 100644 src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicType.java create mode 100644 src/test/java/MusicPlayerTest.java diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java index 3b569f81..d1efdc6a 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MainMenuController.java @@ -3,6 +3,7 @@ package de.hdm_stuttgart.battlearena.Controller; import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Exceptions.DatabaseException; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence; +import de.hdm_stuttgart.battlearena.Model.Sound.MusicPlayer; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Button; @@ -20,6 +21,7 @@ public class MainMenuController { private Button exitButton; private final SceneLoader sceneLoader = new SceneLoader(); private final Persistence persistence = Persistence.getInstance(); + private final MusicPlayer player = MusicPlayer.getInstance(); private void switchScene(String name) { parent.getChildren().clear(); @@ -48,6 +50,7 @@ public class MainMenuController { @FXML private void exit() throws DatabaseException { + player.getScheduler().shutdown(); persistence.savePlayerStatistics(); persistence.saveSettings(); Stage stage = (Stage) exitButton.getScene().getWindow(); diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Main/Driver.java b/src/main/java/de/hdm_stuttgart/battlearena/Main/Driver.java index f8431f9f..83297700 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Main/Driver.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Main/Driver.java @@ -6,6 +6,8 @@ import de.hdm_stuttgart.battlearena.Model.Inputs.InputHandler; import de.hdm_stuttgart.battlearena.Model.Sound.MusicPlayer; import javafx.application.Application; +import javafx.application.Platform; +import javafx.event.EventHandler; import javafx.fxml.FXMLLoader; import javafx.geometry.Rectangle2D; import javafx.scene.Parent; @@ -16,6 +18,7 @@ import javafx.stage.Screen; import javafx.stage.Stage; import javafx.stage.StageStyle; +import javafx.stage.WindowEvent; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -59,6 +62,8 @@ public class Driver extends Application { MusicPlayer player = MusicPlayer.getInstance(); player.startGameStateMonitoring(); + stage.setOnCloseRequest(windowEvent -> MusicPlayer.getInstance().getScheduler().shutdown()); + stage.show(); log.debug("Project started successfully!"); diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicPlayer.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicPlayer.java index c48ea216..f77fa54d 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicPlayer.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicPlayer.java @@ -36,13 +36,15 @@ public class MusicPlayer{ private GameState currentGameState; private SoundFileManager fileManager = new SoundFileManager(); + private ScheduledExecutorService scheduler; + private MusicPlayer(){} public void startGameStateMonitoring(){ - ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor(); + scheduler = Executors.newSingleThreadScheduledExecutor(); scheduler.scheduleAtFixedRate(()->{ GameState newGameState = RuntimeInfo.getInstance().getGameState(); if(currentGameState != newGameState){ @@ -105,6 +107,7 @@ public class MusicPlayer{ public int getVolume(){ return persistence.getSettings().getMusicVolume(); } + public ScheduledExecutorService getScheduler(){return scheduler;} public static MusicPlayer getInstance(){return musicPlayerSingleton;} diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicType.java b/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicType.java deleted file mode 100644 index b7d5924e..00000000 --- a/src/main/java/de/hdm_stuttgart/battlearena/Model/Sound/MusicType.java +++ /dev/null @@ -1,16 +0,0 @@ -package de.hdm_stuttgart.battlearena.Model.Sound; - -public enum MusicType { - MENU("src/main/resources/sound/music/menu"), - OPTIONS("src/main/resources/sound/music/options"), - GAME("src/main/resources/sound/music/game"); - - private String path; - MusicType(String path){ - this.path = path; - } - - public String getPath(){ - return path; - } -} diff --git a/src/main/resources/player/appSettings.json b/src/main/resources/player/appSettings.json index cabb64ea..29ddb093 100644 --- a/src/main/resources/player/appSettings.json +++ b/src/main/resources/player/appSettings.json @@ -1,4 +1,4 @@ { - "sfxVolume": 0, - "musicVolume": 11 + "sfxVolume": 16, + "musicVolume": 39 } \ No newline at end of file diff --git a/src/test/java/MusicPlayerTest.java b/src/test/java/MusicPlayerTest.java new file mode 100644 index 00000000..b56177a7 --- /dev/null +++ b/src/test/java/MusicPlayerTest.java @@ -0,0 +1,26 @@ +import de.hdm_stuttgart.battlearena.Controller.Enum.GameState; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence; +import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.RuntimeInfo; +import de.hdm_stuttgart.battlearena.Model.Sound.MusicPlayer; +import org.apache.logging.log4j.Logger; +import org.apache.logging.log4j.LogManager; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +public class MusicPlayerTest { + private static final Logger log = LogManager.getLogger(MusicPlayerTest.class); + + RuntimeInfo runtimeInfo; + MusicPlayer musicPlayer; + @BeforeEach + void setup(){ + musicPlayer = MusicPlayer.getInstance(); + runtimeInfo = RuntimeInfo.getInstance(); + } + + @Test + void startGameStateMonitoringTest(){ + runtimeInfo.setGameState(GameState.MENU); + musicPlayer.startGameStateMonitoring(); + } +} -- GitLab