diff options
author | sowgro <tpoke.ferrari@gmail.com> | 2024-08-30 12:23:26 -0400 |
---|---|---|
committer | sowgro <tpoke.ferrari@gmail.com> | 2024-08-30 12:23:26 -0400 |
commit | 69f69143f5604626ded3c26ee754b94eaf3c4f15 (patch) | |
tree | a64a1ce20ff21cd6d73b1d36c3e3f9ca930c9b4d | |
parent | aa916b0f06be0d42bec1e035d0efeec954e09243 (diff) | |
download | NPEhero-69f69143f5604626ded3c26ee754b94eaf3c4f15.tar.gz NPEhero-69f69143f5604626ded3c26ee754b94eaf3c4f15.tar.bz2 NPEhero-69f69143f5604626ded3c26ee754b94eaf3c4f15.zip |
Clean up error handling pt.1
14 files changed, 95 insertions, 58 deletions
@@ -9,15 +9,16 @@ Goals: - [ ] Code cleanup - [ ] Installer / Linux package -Todo: -- [ ] Tweak design of songPlayer -- [ ] Redesign level editor menus -- [ ] fix reliance on local font -- [ ] Improve errorList and controlEditor -- [ ] Click sounds on all buttons in editor -- [ ] Fix notesEditor note preview being too small with no notes -- [ ] Properly center background image -- [ ] NotesEditor2: Clicking with the playhead requires pressing play first +Todo - needs design: +- Tweak design of songPlayer +- Redesign level editor menus +- Improve errorList and error handling + +Todo - bugs: +- fix reliance on local font +- Fix notesEditor note preview being too small with no notes +- Properly center background image +- NotesEditor2: Clicking with the playhead requires pressing play first # Installation diff --git a/src/main/java/net/sowgro/npehero/Driver.java b/src/main/java/net/sowgro/npehero/Driver.java index 5a2aa73..411bf87 100755 --- a/src/main/java/net/sowgro/npehero/Driver.java +++ b/src/main/java/net/sowgro/npehero/Driver.java @@ -12,7 +12,7 @@ import javafx.scene.input.KeyEvent; import javafx.scene.layout.*; import javafx.stage.Stage; import javafx.util.Duration; -import net.sowgro.npehero.editor.ErrorDisplay; +import net.sowgro.npehero.main.ErrorDisplay; import net.sowgro.npehero.levelapi.Levels; import net.sowgro.npehero.main.*; import net.sowgro.npehero.gui.MainMenu; @@ -86,7 +86,6 @@ public class Driver extends Application Settings.read(); System.out.println("Settings loaded"); } catch (Exception e) { - e.printStackTrace(); errors.push("Failed to load settings from file\n"+e); } System.out.println("Loading controls..."); @@ -94,7 +93,6 @@ public class Driver extends Application Control.readFromFile(); System.out.println("Controls loaded"); } catch (Exception e) { - e.printStackTrace(); errors.push("Failed to load controls from file\n"+e); } System.out.println("Loading levels..."); @@ -102,7 +100,6 @@ public class Driver extends Application Levels.readData(); System.out.println("Loaded " + Levels.list.size() + " levels (" + Levels.getValidList().size() + " valid)"); } catch (IOException e) { - e.printStackTrace(); errors.push("Failed to load levels\n"); } Page last = new MainMenu(); diff --git a/src/main/java/net/sowgro/npehero/editor/DiffEditor.java b/src/main/java/net/sowgro/npehero/editor/DiffEditor.java index 77e5fa9..6485a4d 100755 --- a/src/main/java/net/sowgro/npehero/editor/DiffEditor.java +++ b/src/main/java/net/sowgro/npehero/editor/DiffEditor.java @@ -72,7 +72,6 @@ public class DiffEditor extends Page try { diff.leaderboard.save(); } catch (IOException e) { - e.printStackTrace(); Driver.setMenu(new ErrorDisplay("Failed to clear the leaderboard:\n"+e, this)); } }); @@ -97,7 +96,6 @@ public class DiffEditor extends Page try { diff.writeMetadata(); } catch (IOException e) { - e.printStackTrace(); //TODO throw new RuntimeException(e); } diff --git a/src/main/java/net/sowgro/npehero/editor/DiffList.java b/src/main/java/net/sowgro/npehero/editor/DiffList.java index e435b22..7106609 100755 --- a/src/main/java/net/sowgro/npehero/editor/DiffList.java +++ b/src/main/java/net/sowgro/npehero/editor/DiffList.java @@ -11,6 +11,8 @@ import javafx.scene.layout.VBox; import net.sowgro.npehero.Driver; import net.sowgro.npehero.levelapi.Difficulty; import net.sowgro.npehero.levelapi.Level; +import net.sowgro.npehero.main.ErrorDisplay; +import net.sowgro.npehero.main.ErrorList; import net.sowgro.npehero.main.Page; import net.sowgro.npehero.main.Sound; @@ -84,8 +86,7 @@ public class DiffList extends Page try { level.difficulties.remove(diffs.getSelectionModel().getSelectedItem()); } catch (IOException ex) { - ex.printStackTrace(); - Driver.setMenu(new ErrorDisplay("Failed to remove difficulty\n"+e, this)); + Driver.setMenu(new ErrorDisplay("Failed to remove difficulty", ex, this)); } }); remove.setDisable(true); @@ -120,8 +121,7 @@ public class DiffList extends Page try { level.difficulties.saveOrder(); } catch (IOException e) { - e.printStackTrace(); - Driver.setMenu(new ErrorDisplay("Failed to move difficulty\n"+e,this)); + Driver.setMenu(new ErrorDisplay("Failed to move difficulty", e,this)); } }); @@ -139,8 +139,7 @@ public class DiffList extends Page try { level.difficulties.saveOrder(); } catch (IOException e) { - e.printStackTrace(); - Driver.setMenu(new ErrorDisplay("Failed to move difficulty\n"+e,this)); + Driver.setMenu(new ErrorDisplay("Failed to move difficulty", e,this)); } }); @@ -168,7 +167,7 @@ public class DiffList extends Page } catch (FileAlreadyExistsException e) { Driver.setMenu(new ErrorDisplay("Failed to add difficulty\nA difficulty already exists with the folder name " + e.getFile(), this)); } catch (IOException e) { - Driver.setMenu(new ErrorDisplay("Failed to add difficulty\n" + e, this)); + Driver.setMenu(new ErrorDisplay("Failed to add difficulty", e, this)); } }; Driver.setMenu(new FolderNameEntry("difficulty", this, next)); diff --git a/src/main/java/net/sowgro/npehero/editor/LevelEditor.java b/src/main/java/net/sowgro/npehero/editor/LevelEditor.java index e02da0f..8e49180 100755 --- a/src/main/java/net/sowgro/npehero/editor/LevelEditor.java +++ b/src/main/java/net/sowgro/npehero/editor/LevelEditor.java @@ -152,13 +152,11 @@ public class LevelEditor extends Page } } catch (Exception ex) { // TODO - ex.printStackTrace(); } try { level.writeMetadata(); } catch (IOException ex) { // TODO - ex.printStackTrace(); } validate(); }); diff --git a/src/main/java/net/sowgro/npehero/editor/LevelList.java b/src/main/java/net/sowgro/npehero/editor/LevelList.java index 6bd725f..492683f 100755 --- a/src/main/java/net/sowgro/npehero/editor/LevelList.java +++ b/src/main/java/net/sowgro/npehero/editor/LevelList.java @@ -6,7 +6,6 @@ import javafx.geometry.Pos; import javafx.scene.control.*; import javafx.scene.control.Button; import javafx.scene.control.Label; -import javafx.scene.control.TextField; import javafx.scene.layout.Pane; import net.sowgro.npehero.Driver; import javafx.scene.layout.HBox; @@ -14,6 +13,8 @@ import javafx.scene.layout.VBox; import net.sowgro.npehero.gui.MainMenu; import net.sowgro.npehero.levelapi.Level; import net.sowgro.npehero.levelapi.Levels; +import net.sowgro.npehero.main.ErrorDisplay; +import net.sowgro.npehero.main.ErrorList; import net.sowgro.npehero.main.Page; import net.sowgro.npehero.main.Sound; @@ -97,8 +98,7 @@ public class LevelList extends Page try { Levels.remove(levels.getSelectionModel().getSelectedItem()); } catch (IOException ex) { - Driver.setMenu(new ErrorDisplay("Failed to remove this level\n"+e.toString(), this)); - ex.printStackTrace(); + Driver.setMenu(new ErrorDisplay("Failed to remove this level", ex, this)); } }); remove.setDisable(true); @@ -110,8 +110,7 @@ public class LevelList extends Page try { Levels.readData(); } catch (IOException ex) { - Driver.setMenu(new ErrorDisplay("Failed to load levels: Level folder is missing\n"+e.toString(), this)); - ex.printStackTrace(); + Driver.setMenu(new ErrorDisplay("Failed to load levels: Level folder is missing", ex, this)); } levels.setItems(Levels.list); }); @@ -124,7 +123,7 @@ public class LevelList extends Page try { Desktop.getDesktop().open(Levels.dir); } catch (IOException ex) { - Driver.setMenu(new ErrorDisplay("Failed to open folder\n"+ex, this)); + Driver.setMenu(new ErrorDisplay("Failed to open folder", ex, this)); } }).start()); @@ -163,7 +162,7 @@ public class LevelList extends Page } catch (FileAlreadyExistsException e) { Driver.setMenu(new ErrorDisplay("Failed to add level\nA level already exists with the folder name '" + e.getFile() + "'", this)); } catch (IOException e) { - Driver.setMenu(new ErrorDisplay("Failed to create level\n"+e, this)); + Driver.setMenu(new ErrorDisplay("Failed to create level", e, this)); } }; Driver.setMenu(new FolderNameEntry("level", this, next)); diff --git a/src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java b/src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java index 33f9a51..e51faa9 100755 --- a/src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java +++ b/src/main/java/net/sowgro/npehero/gameplay/SongPlayer.java @@ -125,7 +125,6 @@ public class SongPlayer extends Pane { try { loadSong(); //Calls the file loading from the song's notes.txt file } catch (FileNotFoundException e) { - e.printStackTrace(); } dButton.setColor(lvl.colors[0]); //sets the color of the five buttons to be diff --git a/src/main/java/net/sowgro/npehero/gui/ControlEditor.java b/src/main/java/net/sowgro/npehero/gui/ControlEditor.java index 8e4d1d5..8298aa5 100644 --- a/src/main/java/net/sowgro/npehero/gui/ControlEditor.java +++ b/src/main/java/net/sowgro/npehero/gui/ControlEditor.java @@ -8,7 +8,7 @@ import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.scene.layout.*; import net.sowgro.npehero.Driver; -import net.sowgro.npehero.editor.ErrorDisplay; +import net.sowgro.npehero.main.ErrorDisplay; import net.sowgro.npehero.main.Control; import net.sowgro.npehero.main.Page; import net.sowgro.npehero.main.Sound; @@ -78,8 +78,7 @@ public class ControlEditor extends Page { try { Control.writeToFile(); } catch (IOException e) { - Driver.setMenu(new ErrorDisplay("An error occured while saving your controls\n"+e, this)); - e.printStackTrace(); + Driver.setMenu(new ErrorDisplay("An error occurred while saving your controls", e, this)); } }); controlButton.setOnAction(_ -> { diff --git a/src/main/java/net/sowgro/npehero/gui/GameOver.java b/src/main/java/net/sowgro/npehero/gui/GameOver.java index b66d0c6..0ae3daf 100755 --- a/src/main/java/net/sowgro/npehero/gui/GameOver.java +++ b/src/main/java/net/sowgro/npehero/gui/GameOver.java @@ -10,7 +10,7 @@ import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import javafx.scene.text.Text; import net.sowgro.npehero.Driver; -import net.sowgro.npehero.editor.ErrorDisplay; +import net.sowgro.npehero.main.ErrorDisplay; import net.sowgro.npehero.levelapi.Difficulty; import net.sowgro.npehero.levelapi.Level; import net.sowgro.npehero.main.Page; @@ -73,8 +73,7 @@ public class GameOver extends Page try { diff.leaderboard.add(name.getText(), score2); } catch (IOException e) { - e.printStackTrace(); - Driver.setMenu(new ErrorDisplay("Failed to save score to leaderboard:\n"+e, this)); + Driver.setMenu(new ErrorDisplay("Failed to save score to leaderboard", e, this)); } }); diff --git a/src/main/java/net/sowgro/npehero/gui/SettingsEditor.java b/src/main/java/net/sowgro/npehero/gui/SettingsEditor.java index efd136a..f83a8a4 100755 --- a/src/main/java/net/sowgro/npehero/gui/SettingsEditor.java +++ b/src/main/java/net/sowgro/npehero/gui/SettingsEditor.java @@ -11,7 +11,7 @@ import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import javafx.scene.text.Text; import net.sowgro.npehero.Driver; -import net.sowgro.npehero.editor.ErrorDisplay; +import net.sowgro.npehero.main.ErrorDisplay; import net.sowgro.npehero.main.Page; import net.sowgro.npehero.main.Settings; import net.sowgro.npehero.main.Sound; @@ -95,8 +95,7 @@ public class SettingsEditor extends Page try { Settings.save(); } catch (IOException ex) { - ex.printStackTrace(); - Driver.setMenu(new ErrorDisplay("Failed to save settings"+ex, this)); + Driver.setMenu(new ErrorDisplay("Failed to save settings", ex, this)); } Sound.playSfx(Sound.BACKWARD); Driver.setMenu(new MainMenu()); diff --git a/src/main/java/net/sowgro/npehero/levelapi/Difficulties.java b/src/main/java/net/sowgro/npehero/levelapi/Difficulties.java index cfb3673..d5483a8 100644 --- a/src/main/java/net/sowgro/npehero/levelapi/Difficulties.java +++ b/src/main/java/net/sowgro/npehero/levelapi/Difficulties.java @@ -51,8 +51,7 @@ public class Difficulties { Difficulty diff = new Difficulty(cur, level); list.add(diff); } catch (IOException e) { - problems.put(cur.getName(), e); - e.printStackTrace(); + problems.put("Failed to load difficulty in folder '" + cur.getName() + "'", e); } } } diff --git a/src/main/java/net/sowgro/npehero/levelapi/Levels.java b/src/main/java/net/sowgro/npehero/levelapi/Levels.java index 37878d8..84d169c 100755 --- a/src/main/java/net/sowgro/npehero/levelapi/Levels.java +++ b/src/main/java/net/sowgro/npehero/levelapi/Levels.java @@ -40,8 +40,7 @@ public class Levels { Level level = new Level(file); list.add(level); } catch (Exception e) { - problems.put(file.getName(), e); - e.printStackTrace(); + problems.put("Failed to load load level in folder '" + file.getName() + "'", e); } } list.sort(Comparator.naturalOrder()); diff --git a/src/main/java/net/sowgro/npehero/editor/ErrorDisplay.java b/src/main/java/net/sowgro/npehero/main/ErrorDisplay.java index c07d12f..cd43937 100644 --- a/src/main/java/net/sowgro/npehero/editor/ErrorDisplay.java +++ b/src/main/java/net/sowgro/npehero/main/ErrorDisplay.java @@ -1,4 +1,4 @@ -package net.sowgro.npehero.editor; +package net.sowgro.npehero.main; import javafx.geometry.Insets; import javafx.geometry.Pos; @@ -8,8 +8,9 @@ import javafx.scene.layout.HBox; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import net.sowgro.npehero.Driver; -import net.sowgro.npehero.main.Page; -import net.sowgro.npehero.main.Sound; + +import java.io.PrintWriter; +import java.io.StringWriter; public class ErrorDisplay extends Page { @@ -43,6 +44,64 @@ public class ErrorDisplay extends Page { } /** + * Error display with a message, exception and Back button + * @param message The message to display + * @param e The exception that occurred + * @param prev The destination of the close button + */ + public ErrorDisplay(String message, Exception e, Page prev) { + Label title = new Label(message); + title.setPadding(new Insets(10)); + title.setWrapText(true); + + Label exView = new Label(e.toString()); + exView.getStyleClass().add("red"); + + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + e.printStackTrace(pw); + String sStackTrace = sw.toString(); // stack trace as a string + + Label stackTrace = new Label(sStackTrace); + stackTrace.getStyleClass().add("red"); + stackTrace.setVisible(false); + stackTrace.setManaged(false); + + Button exit = new Button(); + exit.setText("Ok"); + exit.setOnAction(_ -> { + Sound.playSfx(Sound.BACKWARD); + Driver.setMenu(prev); + }); + + Button printStack = new Button("Print to console"); + printStack.setOnAction(_ -> { + Sound.playSfx(Sound.FORWARD); + e.printStackTrace(); + }); + + Button showStack = new Button("Show Stack Trace"); + showStack.setOnAction(_ -> { + stackTrace.setVisible(true); + stackTrace.setManaged(true); + }); + + HBox buttonBox = new HBox(exit, showStack); + buttonBox.setSpacing(10); + + VBox main = new VBox(title, exView); + main.getStyleClass().add("box"); + + VBox centerBox = new VBox(); + centerBox.getChildren().addAll(main, buttonBox, stackTrace); + centerBox.setSpacing(10); + centerBox.setAlignment(Pos.CENTER); + + content.getChildren().add(centerBox); + content.setAlignment(Pos.CENTER); + } + + /** * Error display with a message and Cancel and Proceed buttons * @param message The message to display * @param prev The destination of the Cancel button diff --git a/src/main/java/net/sowgro/npehero/editor/ErrorList.java b/src/main/java/net/sowgro/npehero/main/ErrorList.java index 92a9455..a875502 100644 --- a/src/main/java/net/sowgro/npehero/editor/ErrorList.java +++ b/src/main/java/net/sowgro/npehero/main/ErrorList.java @@ -1,19 +1,11 @@ -package net.sowgro.npehero.editor; +package net.sowgro.npehero.main; -import javafx.event.EventHandler; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.control.*; -import javafx.scene.input.KeyEvent; import javafx.scene.layout.*; import net.sowgro.npehero.Driver; -import net.sowgro.npehero.gui.SettingsEditor; -import net.sowgro.npehero.main.Control; -import net.sowgro.npehero.main.Page; -import net.sowgro.npehero.main.Sound; -import java.io.IOException; -import java.util.List; import java.util.Map; public class ErrorList extends Page { @@ -57,7 +49,7 @@ public class ErrorList extends Page { // reset button Button resetButton = new Button("View Error"); - resetButton.setOnAction(_ -> Driver.setMenu(new ErrorDisplay("E: \n"+error.getValue(), this))); + resetButton.setOnAction(_ -> Driver.setMenu(new ErrorDisplay(error.getKey(), error.getValue(), this))); controls.add(resetButton, 1, i); i++; } |