From 445643f23d3e79f5f3c79558e18e355652d7872d Mon Sep 17 00:00:00 2001 From: Bixilon Date: Tue, 3 Nov 2020 22:57:56 +0100 Subject: [PATCH] render: (hopefully) fix SIGSEGV jvm crash It looks like that the jvm crashes when preparing the render window while JavaFX is launching an window. Weired. --- src/main/java/de/bixilon/minosoft/Minosoft.java | 2 +- .../de/bixilon/minosoft/data/assets/AssetsManager.java | 8 -------- .../de/bixilon/minosoft/gui/main/StartProgressWindow.java | 7 ++++++- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/Minosoft.java b/src/main/java/de/bixilon/minosoft/Minosoft.java index 555e1d8e3..5a7bf03ed 100644 --- a/src/main/java/de/bixilon/minosoft/Minosoft.java +++ b/src/main/java/de/bixilon/minosoft/Minosoft.java @@ -164,7 +164,7 @@ public final class Minosoft { GameWindow.prepare(); progress.countDown(); - }, "Game Window", "", Priorities.NORMAL, TaskImportance.REQUIRED, "Assets")); + }, "Game Window", "", Priorities.NORMAL, TaskImportance.REQUIRED, "Assets", "Progress Window")); taskWorker.work(startStatusLatch); try { diff --git a/src/main/java/de/bixilon/minosoft/data/assets/AssetsManager.java b/src/main/java/de/bixilon/minosoft/data/assets/AssetsManager.java index d1d804cb4..72be9b975 100644 --- a/src/main/java/de/bixilon/minosoft/data/assets/AssetsManager.java +++ b/src/main/java/de/bixilon/minosoft/data/assets/AssetsManager.java @@ -98,14 +98,6 @@ public class AssetsManager { e.printStackTrace(); } }); - // ToDo: This is strange. You will get a jvm crash without it on linux. Weired. - /* - try { - Thread.sleep(500L); - } catch (InterruptedException e) { - e.printStackTrace(); - } - */ generateJarAssets(); assets.putAll(parseAssetsIndex(ASSETS_CLIENT_JAR_HASH)); latch.countDown(); diff --git a/src/main/java/de/bixilon/minosoft/gui/main/StartProgressWindow.java b/src/main/java/de/bixilon/minosoft/gui/main/StartProgressWindow.java index 19ae7d46d..6b1ede059 100644 --- a/src/main/java/de/bixilon/minosoft/gui/main/StartProgressWindow.java +++ b/src/main/java/de/bixilon/minosoft/gui/main/StartProgressWindow.java @@ -34,12 +34,14 @@ public class StartProgressWindow extends Application { public static Dialog progressDialog; private static boolean exit = false; - public static void show(CountUpAndDownLatch progress) { + public static void show(CountUpAndDownLatch progress) throws InterruptedException { if (exit) { return; } + CountDownLatch latch = new CountDownLatch(1); new Thread(() -> { if (progress.getCount() == 0) { + latch.countDown(); return; } AtomicReference progressBar = new AtomicReference<>(); @@ -59,11 +61,13 @@ public class StartProgressWindow extends Application { stage.initModality(Modality.APPLICATION_MODAL); stage.setOnCloseRequest((request) -> System.exit(0)); if (exit) { + latch.countDown(); return; } progressDialog.show(); stage.toFront(); }); + latch.countDown(); while (progress.getCount() > 0) { try { progress.waitForChange(); @@ -77,6 +81,7 @@ public class StartProgressWindow extends Application { } hideDialog(); }).start(); + latch.await(); } public static void start() throws InterruptedException {