diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java index d1132b06f6..617f745bb7 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/UpdateHandler.java @@ -20,20 +20,20 @@ import com.google.gson.Gson; import com.google.gson.JsonParseException; import javafx.application.Platform; - import org.jackhuang.hmcl.EntryPoint; import org.jackhuang.hmcl.Main; import org.jackhuang.hmcl.Metadata; +import org.jackhuang.hmcl.java.JavaRuntime; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.task.TaskExecutor; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.ui.UpgradeDialog; import org.jackhuang.hmcl.ui.construct.MessageDialogPane.MessageType; +import org.jackhuang.hmcl.util.FileSaver; import org.jackhuang.hmcl.util.StringUtils; import org.jackhuang.hmcl.util.SwingUtils; import org.jackhuang.hmcl.util.TaskCancellationAction; import org.jackhuang.hmcl.util.io.JarUtils; -import org.jackhuang.hmcl.java.JavaRuntime; import org.jackhuang.hmcl.util.platform.OperatingSystem; import java.io.IOException; @@ -43,13 +43,15 @@ import java.nio.file.Paths; import java.util.*; import java.util.concurrent.CancellationException; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; import java.util.regex.Matcher; import java.util.regex.Pattern; import static org.jackhuang.hmcl.ui.FXUtils.checkFxUserThread; import static org.jackhuang.hmcl.util.Lang.thread; -import static org.jackhuang.hmcl.util.logging.Logger.LOG; import static org.jackhuang.hmcl.util.i18n.I18n.i18n; +import static org.jackhuang.hmcl.util.logging.Logger.LOG; public final class UpdateHandler { private UpdateHandler() { @@ -125,6 +127,26 @@ public static void updateFrom(RemoteVersion version) { throw new IOException("Current JAR is not verified"); } + CompletableFuture future = new CompletableFuture<>(); + + Platform.runLater(() -> { + Controllers.onApplicationStop(); + future.complete(null); + }); + + try { + future.get(); + } catch (ExecutionException | InterruptedException ignored) { + // Ignore + } + + + try { + FileSaver.waitForAllSaves(); + } catch (InterruptedException ignored) { + // Ignore + } + requestUpdate(downloaded, getCurrentLocation()); EntryPoint.exit(0); } catch (IOException e) {