From 3b29a31c54bd395d35cef03d90f50c36ee5b5598 Mon Sep 17 00:00:00 2001 From: Peter <pt033@hdm-stuttgart.de> Date: Thu, 22 Feb 2024 14:29:04 +0100 Subject: [PATCH] update(ui): add exception handler if no video are not available --- .../Controller/MenuBorderPaneController.java | 26 ++++++++++++------- .../Controller/SettingsController.java | 15 ++++++++--- .../Utilities/CreateMediaPlayer.java | 3 ++- .../battlearena/Main/Driver.java | 9 +++++-- 4 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java index a75c7014..550fe929 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/MenuBorderPaneController.java @@ -3,18 +3,23 @@ package de.hdm_stuttgart.battlearena.Controller; import de.hdm_stuttgart.battlearena.Controller.Enum.GameState; import de.hdm_stuttgart.battlearena.Controller.Utilities.CreateMediaPlayer; import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader; +import de.hdm_stuttgart.battlearena.Main.Driver; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.ENUMs.AccountType; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.Persistence; import de.hdm_stuttgart.battlearena.Model.DataStorage.Classes.RuntimeInfo; import javafx.fxml.FXML; import javafx.fxml.Initializable; +import javafx.fxml.LoadException; import javafx.geometry.Rectangle2D; import javafx.scene.control.Button; import javafx.scene.image.ImageView; import javafx.scene.layout.StackPane; +import javafx.scene.media.MediaException; import javafx.scene.media.MediaPlayer; import javafx.scene.media.MediaView; import javafx.stage.Screen; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.io.File; import java.net.URL; @@ -39,6 +44,7 @@ public class MenuBorderPaneController implements Initializable { List<String> shuffledVideos = Arrays.asList(videoFiles); Rectangle2D screen = Screen.getPrimary().getVisualBounds(); RuntimeInfo runtimeInfo = RuntimeInfo.getInstance(); + private static final Logger log = LogManager.getLogger(MenuBorderPaneController.class); @Override public void initialize(URL url, ResourceBundle resourceBundle) { @@ -53,7 +59,6 @@ public class MenuBorderPaneController implements Initializable { imgRight.setPreserveRatio(true); imgLeft.setFitWidth(imageWidth); imgLeft.setPreserveRatio(true); - easterEgg(); // shuffle meme order @@ -68,7 +73,6 @@ public class MenuBorderPaneController implements Initializable { } }); - btnLeft.setOnMouseClicked(mouseEvent -> { // make background music continue play after there is no meme left if (videoCounter == shuffledVideos.size()) { @@ -82,13 +86,17 @@ public class MenuBorderPaneController implements Initializable { if (videoCounter < videoFiles.length) { String nextVideo = shuffledVideos.get(videoCounter); runtimeInfo.setGameState(GameState.NONE); - mediaPlayer = new CreateMediaPlayer().getMediaPlayer(mediaView, new File("src/main/resources/videos/" + nextVideo + ".mp4"), false); - mediaView = new MediaView(mediaPlayer); - center.getChildren().add(mediaView); - mediaPlayer.setOnEndOfMedia(() -> { - center.getChildren().remove(mediaView); - runtimeInfo.setGameState(GameState.MENU); - }); + try { + mediaPlayer = new CreateMediaPlayer().getMediaPlayer(mediaView, new File("src/main/resources/videos/" + nextVideo + ".mp4"), false); + mediaView = new MediaView(mediaPlayer); + center.getChildren().add(mediaView); + mediaPlayer.setOnEndOfMedia(() -> { + center.getChildren().remove(mediaView); + runtimeInfo.setGameState(GameState.MENU); + }); + } catch (MediaException e) { + log.error(e); + } } videoCounter++; }); diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/SettingsController.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/SettingsController.java index 195aaaa6..36a85f33 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/SettingsController.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/SettingsController.java @@ -2,6 +2,7 @@ package de.hdm_stuttgart.battlearena.Controller; import de.hdm_stuttgart.battlearena.Controller.Enum.GameState; import de.hdm_stuttgart.battlearena.Controller.Utilities.SceneLoader; +import de.hdm_stuttgart.battlearena.Main.Driver; 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; @@ -9,8 +10,12 @@ import de.hdm_stuttgart.battlearena.Model.Sound.SoundEffects; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; +import javafx.fxml.LoadException; import javafx.scene.control.Slider; import javafx.scene.layout.VBox; +import javafx.scene.media.MediaException; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import java.io.IOException; import java.net.URL; @@ -27,6 +32,7 @@ public class SettingsController implements Initializable { private final Persistence persistence = Persistence.getInstance(); private final MusicPlayer player = MusicPlayer.getInstance(); private final SoundEffects sfx = new SoundEffects(); + private static final Logger log = LogManager.getLogger(SettingsController.class); @Override public void initialize(URL url, ResourceBundle resourceBundle) { @@ -36,9 +42,12 @@ public class SettingsController implements Initializable { @FXML private void creditScene() throws IOException { - RuntimeInfo.getInstance().setGameState(GameState.NONE); - parent.getChildren().clear(); - parent.getScene().setRoot(FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/credits.fxml")))); + try { + RuntimeInfo.getInstance().setGameState(GameState.NONE); + parent.getScene().setRoot(FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/credits.fxml")))); + } catch (LoadException e) { + log.error(e); + } } @FXML diff --git a/src/main/java/de/hdm_stuttgart/battlearena/Controller/Utilities/CreateMediaPlayer.java b/src/main/java/de/hdm_stuttgart/battlearena/Controller/Utilities/CreateMediaPlayer.java index 4bf6c165..77b75f55 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Controller/Utilities/CreateMediaPlayer.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Controller/Utilities/CreateMediaPlayer.java @@ -2,13 +2,14 @@ package de.hdm_stuttgart.battlearena.Controller.Utilities; import javafx.scene.layout.BorderPane; import javafx.scene.media.Media; +import javafx.scene.media.MediaException; import javafx.scene.media.MediaPlayer; import javafx.scene.media.MediaView; import java.io.File; public class CreateMediaPlayer { - public MediaPlayer getMediaPlayer(MediaView mediaView, File file, boolean isFullscreen, BorderPane... parent) { + public MediaPlayer getMediaPlayer(MediaView mediaView, File file, boolean isFullscreen, BorderPane... parent) throws MediaException { Media media = new Media(file.toURI().toString()); MediaPlayer mediaPlayer = new MediaPlayer(media); 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 83297700..2a12b7cc 100644 --- a/src/main/java/de/hdm_stuttgart/battlearena/Main/Driver.java +++ b/src/main/java/de/hdm_stuttgart/battlearena/Main/Driver.java @@ -9,6 +9,7 @@ import javafx.application.Application; import javafx.application.Platform; import javafx.event.EventHandler; import javafx.fxml.FXMLLoader; +import javafx.fxml.LoadException; import javafx.geometry.Rectangle2D; import javafx.scene.Parent; import javafx.scene.Scene; @@ -30,6 +31,7 @@ public class Driver extends Application { Rectangle2D screen = Screen.getPrimary().getVisualBounds(); InputHandler inputHandler = InputHandler.getInstance(); + Parent root; @@ -40,8 +42,11 @@ public class Driver extends Application { Font.loadFont(getClass().getResourceAsStream("/fonts/AmaticSC-Bold.ttf"), 50); Font.loadFont(getClass().getResourceAsStream("/fonts/Arthemis-mLA22.ttf"), 50); Font.loadFont(getClass().getResourceAsStream("/fonts/ShadowsIntoLight-Regular.ttf"), 50); - - Parent root = FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/Intro.fxml"))); + try { + root = FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/Intro.fxml"))); + } catch (LoadException e) { + root = FXMLLoader.load(Objects.requireNonNull(getClass().getResource("/fxml/LoadingScreen.fxml"))); + } Scene scene = new Scene(root); -- GitLab