From 5aece5a8d383f0b784da50dddeaa86fd31bb0f30 Mon Sep 17 00:00:00 2001 From: fgnm Date: Sun, 28 Jan 2024 22:57:34 +0100 Subject: [PATCH] [editor only] What if it never shut down after a crash? --- gradle.properties | 2 +- .../editor/CustomExceptionHandler.java | 17 ++++++++++++++--- .../editor/FacadeExceptionHandler.java | 18 ++++++++++++++++++ src/main/java/games/rednblack/editor/Main.java | 1 + .../editor/proxy/SettingsManager.java | 2 +- 5 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 src/main/java/games/rednblack/editor/FacadeExceptionHandler.java diff --git a/gradle.properties b/gradle.properties index f5486e92..3123e775 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,4 +7,4 @@ typingLabelVersion = 1.3.0 shapedrawerVersion = 2.5.0 talosVersion = 1.5.0-SNAPSHOT gdxTinyVGVersion=7a8927633e -pureMvcVersion=1.0.2 \ No newline at end of file +pureMvcVersion=1.0.3-SNAPSHOT \ No newline at end of file diff --git a/src/main/java/games/rednblack/editor/CustomExceptionHandler.java b/src/main/java/games/rednblack/editor/CustomExceptionHandler.java index f5665a4e..9c6666a5 100644 --- a/src/main/java/games/rednblack/editor/CustomExceptionHandler.java +++ b/src/main/java/games/rednblack/editor/CustomExceptionHandler.java @@ -27,10 +27,20 @@ public class CustomExceptionHandler implements UncaughtExceptionHandler { writeToFile(stacktrace); printWriter.close(); - showErrorDialog(stacktrace); + showErrorDialog(t, stacktrace); } - public static void showErrorDialog(String stacktrace) { + public static void showErrorDialog(Throwable e) { + final Writer result = new StringWriter(); + final PrintWriter printWriter = new PrintWriter(result); + e.printStackTrace(printWriter); + e.printStackTrace(); + String stacktrace = result.toString(); + + showErrorDialog(null, stacktrace); + } + + public static void showErrorDialog(Thread t, String stacktrace) { File localPath = new File(HyperLap2DUtils.getRootPath() + File.separator + "crash" + File.separator + "java-hyperlog.txt"); stacktrace = stacktrace.replace("<", ""); @@ -44,7 +54,8 @@ public class CustomExceptionHandler implements UncaughtExceptionHandler { + "\n\n System: " + SystemUtils.OS_NAME + " " + SystemUtils.OS_VERSION + " (HyperLap2D v" + AppConfig.getInstance().versionString + ")" + "\n\n" + stacktrace, "ok", "error", true); - System.exit(-1); + if (t != null) + System.exit(-1); } private void writeToFile(String stacktrace) { diff --git a/src/main/java/games/rednblack/editor/FacadeExceptionHandler.java b/src/main/java/games/rednblack/editor/FacadeExceptionHandler.java new file mode 100644 index 00000000..813ae288 --- /dev/null +++ b/src/main/java/games/rednblack/editor/FacadeExceptionHandler.java @@ -0,0 +1,18 @@ +package games.rednblack.editor; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.io.Writer; + +public class FacadeExceptionHandler implements Thread.UncaughtExceptionHandler { + + @Override + public void uncaughtException(Thread t, Throwable e) { + final Writer result = new StringWriter(); + final PrintWriter printWriter = new PrintWriter(result); + e.printStackTrace(printWriter); + String stacktrace = result.toString(); + + CustomExceptionHandler.showErrorDialog(null, stacktrace); + } +} diff --git a/src/main/java/games/rednblack/editor/Main.java b/src/main/java/games/rednblack/editor/Main.java index eee98256..b86239d6 100644 --- a/src/main/java/games/rednblack/editor/Main.java +++ b/src/main/java/games/rednblack/editor/Main.java @@ -28,6 +28,7 @@ public class Main { } Thread.currentThread().setUncaughtExceptionHandler(new CustomExceptionHandler()); + Facade.getInstance().setUncaughtExceptionHandler(new FacadeExceptionHandler()); //Increase default lwjgl stack size System.setProperty("org.lwjgl.system.stackSize", "256"); diff --git a/src/main/java/games/rednblack/editor/proxy/SettingsManager.java b/src/main/java/games/rednblack/editor/proxy/SettingsManager.java index 3c8958ac..eb4399f4 100644 --- a/src/main/java/games/rednblack/editor/proxy/SettingsManager.java +++ b/src/main/java/games/rednblack/editor/proxy/SettingsManager.java @@ -58,7 +58,7 @@ public class SettingsManager extends Proxy { e.printStackTrace(printWriter); e.printStackTrace(); String stacktrace = result.toString(); - CustomExceptionHandler.showErrorDialog(stacktrace); + CustomExceptionHandler.showErrorDialog(null, stacktrace); } }