From f866eab8bac927ee7b86b3fbfc55b27b77f0e9bd Mon Sep 17 00:00:00 2001 From: lieght <49651652+BAFGdeJong@users.noreply.github.com> Date: Wed, 3 Dec 2025 21:50:32 +0100 Subject: [PATCH] Best fix for white screen at start --- app/src/main/java/org/toop/app/App.java | 40 ++++++++++++++----- app/src/main/java/org/toop/app/Server.java | 3 +- .../app/widget/complex/LoadingWidget.java | 4 +- 3 files changed, 34 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/org/toop/app/App.java b/app/src/main/java/org/toop/app/App.java index 4b4cf24..62364b0 100644 --- a/app/src/main/java/org/toop/app/App.java +++ b/app/src/main/java/org/toop/app/App.java @@ -1,5 +1,7 @@ package org.toop.app; +import javafx.application.Platform; +import javafx.scene.paint.Color; import org.toop.Main; import org.toop.app.widget.Primitive; import org.toop.app.widget.Widget; @@ -50,11 +52,13 @@ public final class App extends Application { final StackPane root = WidgetContainer.setup(); final Scene scene = new Scene(root); + stage.setOpacity(0.0); + stage.setTitle(AppContext.getString("app-title")); stage.titleProperty().bind(AppContext.bindToKey("app-title")); - stage.setWidth(1080); - stage.setHeight(720); + stage.setWidth(0); + stage.setHeight(0); scene.getRoot(); @@ -82,23 +86,37 @@ public final class App extends Application { "Loading...", false), 0, 0, Integer.MAX_VALUE, false // Just set a high default ); - WidgetContainer.add(Pos.CENTER, loading); + WidgetContainer.setCurrentView(loading); setOnLoadingSuccess(loading); EventFlow loadingFlow = new EventFlow(); + + final boolean[] hasRun = {false}; loadingFlow .listen(AssetLoaderEvents.LoadingProgressUpdate.class, e -> { - loading.setMaxAmount(e.isLoadingAmount()); + if (!hasRun[0]) { + hasRun[0] = true; + try { + Thread.sleep(100); + } catch (InterruptedException ex) { + throw new RuntimeException(ex); + } + Platform.runLater(() -> stage.setOpacity(1.0)); + } - try { - loading.setAmount(e.hasLoadedAmount()); - } catch (Exception ex) { - throw new RuntimeException(ex); - } + Platform.runLater(() -> loading.setMaxAmount(e.isLoadingAmount())); + + Platform.runLater(() -> { + try { + loading.setAmount(e.hasLoadedAmount()); + } catch (Exception ex) { + throw new RuntimeException(ex); + } + }); if (e.hasLoadedAmount() >= e.isLoadingAmount()) { - loading.triggerSuccess(); + Platform.runLater(loading::triggerSuccess); loadingFlow.unsubscribe("init_loading"); } @@ -107,7 +125,9 @@ public final class App extends Application { // Start loading assets new Thread(() -> ResourceManager.loadAssets(new ResourceLoader("app/src/main/resources/assets"))) .start(); + stage.show(); + } private void setOnLoadingSuccess(LoadingWidget loading) { diff --git a/app/src/main/java/org/toop/app/Server.java b/app/src/main/java/org/toop/app/Server.java index 4b149d2..c5e13e7 100644 --- a/app/src/main/java/org/toop/app/Server.java +++ b/app/src/main/java/org/toop/app/Server.java @@ -100,6 +100,7 @@ public final class Server { loading.setOnFailure(() -> { WidgetContainer.getCurrentView().transitionPrevious(); a.unsubscribe("connecting"); + a.unsubscribe("startclient"); WidgetContainer.add( Pos.CENTER, new ErrorPopup(AppContext.getString("connecting-failed") + " " + ip + ":" + port) @@ -151,8 +152,6 @@ public final class Server { .listen(NetworkEvents.GameResultResponse.class, this::handleGameResult, false) .listen(NetworkEvents.GameMoveResponse.class, this::handleReceivedMove, false) .listen(NetworkEvents.YourTurnResponse.class, this::handleYourTurn, false); - startPopulateScheduler(); - populateGameList(); } private void sendChallenge(String opponent) { diff --git a/app/src/main/java/org/toop/app/widget/complex/LoadingWidget.java b/app/src/main/java/org/toop/app/widget/complex/LoadingWidget.java index e0cff14..d07b5b6 100644 --- a/app/src/main/java/org/toop/app/widget/complex/LoadingWidget.java +++ b/app/src/main/java/org/toop/app/widget/complex/LoadingWidget.java @@ -148,6 +148,8 @@ public class LoadingWidget extends ViewWidget implements Update { // TODO make o if (maxAmount != 0) { percentage = (float) amount / maxAmount; } - if (!isInfiniteBar) progressBar.setProgress(percentage); + if (!isInfiniteBar) { + progressBar.setProgress(percentage); + } } }