From f0804327493e891c67cdfed9a16f0858f117b85e Mon Sep 17 00:00:00 2001 From: Bixilon Date: Wed, 28 Oct 2020 17:18:16 +0100 Subject: [PATCH] Show start progress not always on top, do not open gui while starting, fix window blocking --- src/main/java/de/bixilon/minosoft/Minosoft.java | 8 ++++++-- .../java/de/bixilon/minosoft/gui/main/Launcher.java | 12 ++++++++++-- .../minosoft/gui/main/StartProgressWindow.java | 8 ++++---- .../java/de/bixilon/minosoft/util/task/Task.java | 10 ++++++++++ 4 files changed, 30 insertions(+), 8 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/Minosoft.java b/src/main/java/de/bixilon/minosoft/Minosoft.java index 06d489788..bfba04c92 100644 --- a/src/main/java/de/bixilon/minosoft/Minosoft.java +++ b/src/main/java/de/bixilon/minosoft/Minosoft.java @@ -143,8 +143,6 @@ public final class Minosoft { }, "ModLoading", "", Priorities.NORMAL, TaskImportance.REQUIRED)); - taskWorker.addTask(new Task(progress -> Launcher.start(), "Launcher", "", Priorities.HIGH, TaskImportance.OPTIONAL, "Minosoft Language", "JavaFx Toolkit")); - taskWorker.addTask(new Task(progress -> { progress.countUp(); AssetsManager.downloadAllAssets(progress); @@ -168,6 +166,12 @@ public final class Minosoft { }, "Game Window", "", Priorities.NORMAL, TaskImportance.REQUIRED, "Assets")); taskWorker.work(startStatusLatch); + try { + startStatusLatch.waitUntilZero(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + Launcher.start(); } public static void checkClientToken() { diff --git a/src/main/java/de/bixilon/minosoft/gui/main/Launcher.java b/src/main/java/de/bixilon/minosoft/gui/main/Launcher.java index 9f521d797..13b23d3f2 100644 --- a/src/main/java/de/bixilon/minosoft/gui/main/Launcher.java +++ b/src/main/java/de/bixilon/minosoft/gui/main/Launcher.java @@ -36,7 +36,7 @@ public class Launcher { private static Stage stage; private static boolean exit = false; - public static void start() throws Exception { + public static void start() { Log.info("Starting launcher..."); CountDownLatch latch = new CountDownLatch(1); Platform.runLater(() -> { @@ -89,7 +89,11 @@ public class Launcher { } latch.countDown(); }); - latch.await(); + try { + latch.await(); + } catch (InterruptedException e) { + e.printStackTrace(); + } Log.info("Launcher started!"); } @@ -101,4 +105,8 @@ public class Launcher { Platform.runLater(() -> stage.close()); } + + public static Stage getStage() { + return stage; + } } \ No newline at end of file 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 aae2f5f23..9ce722fd1 100644 --- a/src/main/java/de/bixilon/minosoft/gui/main/StartProgressWindow.java +++ b/src/main/java/de/bixilon/minosoft/gui/main/StartProgressWindow.java @@ -23,6 +23,7 @@ import javafx.scene.control.Dialog; import javafx.scene.control.Label; import javafx.scene.control.ProgressBar; import javafx.scene.layout.GridPane; +import javafx.stage.Modality; import javafx.stage.Stage; import java.util.concurrent.CountDownLatch; @@ -30,7 +31,7 @@ import java.util.concurrent.atomic.AtomicReference; public class StartProgressWindow extends Application { public static CountDownLatch toolkitLatch = new CountDownLatch(2); // 2 if not started, 1 if started, 2 if loaded - private static Dialog progressDialog; + public static Dialog progressDialog; private static boolean exit = false; public static void show(CountUpAndDownLatch progress) { @@ -53,13 +54,12 @@ public class StartProgressWindow extends Application { grid.add(progressBar.get(), 0, 0); grid.add(progressLabel.get(), 1, 0); progressDialog.getDialogPane().setContent(grid); + Stage stage = (Stage) progressDialog.getDialogPane().getScene().getWindow(); + stage.initModality(Modality.APPLICATION_MODAL); if (exit) { return; } progressDialog.show(); - - Stage stage = (Stage) progressDialog.getDialogPane().getScene().getWindow(); - stage.setAlwaysOnTop(true); stage.toFront(); }); diff --git a/src/main/java/de/bixilon/minosoft/util/task/Task.java b/src/main/java/de/bixilon/minosoft/util/task/Task.java index 21281e280..da33dcabf 100644 --- a/src/main/java/de/bixilon/minosoft/util/task/Task.java +++ b/src/main/java/de/bixilon/minosoft/util/task/Task.java @@ -17,6 +17,7 @@ import de.bixilon.minosoft.modding.loading.Priorities; import java.util.Arrays; import java.util.HashSet; +import java.util.List; import java.util.Set; public class Task { @@ -57,6 +58,15 @@ public class Task { this.dependsOns = dependsOn; } + public Task(TaskCallable task, String taskName, String taskDescription, Priorities priority, TaskImportance importance, List dependsOn) { + this.task = task; + this.taskName = taskName; + this.taskDescription = taskDescription; + this.priority = priority; + this.importance = importance; + dependsOn.forEach((dependency) -> this.dependsOns.add(dependency.getTaskName())); + } + public Task(TaskCallable task, String taskName, String taskDescription, Priorities priority, TaskImportance importance, String... dependsOn) { this.task = task; this.taskName = taskName;