From d75c3b584ac535f59c37103684e19f5b91b44905 Mon Sep 17 00:00:00 2001 From: yushijinhun Date: Thu, 7 Jun 2018 00:46:16 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=8A=A0=E8=BD=BDJREs?= =?UTF-8?q?=E6=97=B6=E5=8F=AF=E8=83=BD=E7=9A=84=E5=B9=B6=E5=8F=91=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hmcl/ui/VersionSettingsController.java | 55 +++++++++++-------- .../org/jackhuang/hmcl/util/JavaVersion.java | 4 ++ 2 files changed, 37 insertions(+), 22 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionSettingsController.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionSettingsController.java index 3510142dc..1a70f0853 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionSettingsController.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/VersionSettingsController.java @@ -23,7 +23,6 @@ import com.jfoenix.controls.JFXTextField; import com.jfoenix.controls.JFXToggleButton; import javafx.application.Platform; import javafx.fxml.FXML; -import javafx.scene.Node; import javafx.scene.control.Label; import javafx.scene.control.ScrollPane; import javafx.scene.control.Toggle; @@ -44,7 +43,7 @@ import org.jackhuang.hmcl.util.*; import java.io.File; import java.io.IOException; import java.util.Arrays; -import java.util.Collection; +import java.util.List; import java.util.Optional; import java.util.logging.Level; import java.util.stream.Collectors; @@ -84,11 +83,14 @@ public final class VersionSettingsController { FXUtils.smoothScrolling(scroll); - Task.of(variables -> variables.set("list", JavaVersion.getJREs().stream().map(javaVersion -> - javaItem.createChildren(javaVersion.getVersion(), javaVersion.getBinary().getAbsolutePath(), javaVersion) - ).collect(Collectors.toList()))).subscribe(Schedulers.javafx(), variables -> - javaItem.loadChildren(variables.>get("list")) - ); + Task.of(variables -> variables.set("list", JavaVersion.getJREs())) + .subscribe(Schedulers.javafx(), variables -> { + javaItem.loadChildren( + (variables.>get("list")).stream() + .map(javaVersion -> javaItem.createChildren(javaVersion.getVersion(), javaVersion.getBinary().getAbsolutePath(), javaVersion)) + .collect(Collectors.toList())); + initializeSelectedJava(); + }); if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS) javaItem.getExtensionFilters().add(new FileChooser.ExtensionFilter("Java", "java.exe", "javaw.exe")); @@ -151,17 +153,6 @@ public final class VersionSettingsController { FXUtils.bindBoolean(chkShowLogs, versionSetting.showLogsProperty()); FXUtils.bindEnum(cboLauncherVisibility, versionSetting.launcherVisibilityProperty()); - boolean flag = false; - Toggle defaultToggle = null; - for (Toggle toggle : javaItem.getGroup().getToggles()) { - if (toggle.getUserData() == Lang.invoke(versionSetting::getJavaVersion)) { - toggle.setSelected(true); - flag = true; - } else if (toggle.getUserData() == JavaVersion.fromCurrentEnvironment()) { - defaultToggle = toggle; - } - } - javaItem.setToggleSelectedListener(newValue -> { if (javaItem.isCustomToggle(newValue)) { versionSetting.setJava("Custom"); @@ -173,10 +164,6 @@ public final class VersionSettingsController { } }); - if (!flag) { - Optional.ofNullable(defaultToggle).ifPresent(t -> t.setSelected(true)); - } - versionSetting.javaDirProperty().setChangedListener(it -> initJavaSubtitle(versionSetting)); versionSetting.javaProperty().setChangedListener(it -> initJavaSubtitle(versionSetting)); initJavaSubtitle(versionSetting); @@ -210,9 +197,33 @@ public final class VersionSettingsController { lastVersionSetting = versionSetting; + initializeSelectedJava(); + loadIcon(); } + private void initializeSelectedJava() { + if (lastVersionSetting == null + || !JavaVersion.getJREsImmediately().isPresent() /* JREs are still being loaded */) { + return; + } + + boolean flag = false; + Toggle defaultToggle = null; + for (Toggle toggle : javaItem.getGroup().getToggles()) { + if (toggle.getUserData() == Lang.invoke(lastVersionSetting::getJavaVersion)) { + toggle.setSelected(true); + flag = true; + } else if (toggle.getUserData() == JavaVersion.fromCurrentEnvironment()) { + defaultToggle = toggle; + } + } + + if (!flag) { + Optional.ofNullable(defaultToggle).ifPresent(t -> t.setSelected(true)); + } + } + private void initJavaSubtitle(VersionSetting versionSetting) { Task.of(variables -> variables.set("java", versionSetting.getJavaVersion())) .subscribe(Task.of(Schedulers.javafx(), diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/JavaVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/JavaVersion.java index 31e438c69..96714f06c 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/JavaVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/JavaVersion.java @@ -165,6 +165,10 @@ public final class JavaVersion implements Serializable { private static List JAVAS; private static final CountDownLatch LATCH = new CountDownLatch(1); + public static Optional> getJREsImmediately() { + return Optional.ofNullable(JAVAS); + } + public static List getJREs() throws InterruptedException { if (JAVAS != null) return JAVAS;