@@ -23,7 +23,6 @@ import com.jfoenix.controls.JFXTextField;
|
|||||||
import com.jfoenix.controls.JFXToggleButton;
|
import com.jfoenix.controls.JFXToggleButton;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.scene.Node;
|
|
||||||
import javafx.scene.control.Label;
|
import javafx.scene.control.Label;
|
||||||
import javafx.scene.control.ScrollPane;
|
import javafx.scene.control.ScrollPane;
|
||||||
import javafx.scene.control.Toggle;
|
import javafx.scene.control.Toggle;
|
||||||
@@ -44,7 +43,7 @@ import org.jackhuang.hmcl.util.*;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collection;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@@ -84,11 +83,14 @@ public final class VersionSettingsController {
|
|||||||
|
|
||||||
FXUtils.smoothScrolling(scroll);
|
FXUtils.smoothScrolling(scroll);
|
||||||
|
|
||||||
Task.of(variables -> variables.set("list", JavaVersion.getJREs().stream().map(javaVersion ->
|
Task.of(variables -> variables.set("list", JavaVersion.getJREs()))
|
||||||
javaItem.createChildren(javaVersion.getVersion(), javaVersion.getBinary().getAbsolutePath(), javaVersion)
|
.subscribe(Schedulers.javafx(), variables -> {
|
||||||
).collect(Collectors.toList()))).subscribe(Schedulers.javafx(), variables ->
|
javaItem.loadChildren(
|
||||||
javaItem.loadChildren(variables.<Collection<Node>>get("list"))
|
(variables.<List<JavaVersion>>get("list")).stream()
|
||||||
);
|
.map(javaVersion -> javaItem.createChildren(javaVersion.getVersion(), javaVersion.getBinary().getAbsolutePath(), javaVersion))
|
||||||
|
.collect(Collectors.toList()));
|
||||||
|
initializeSelectedJava();
|
||||||
|
});
|
||||||
|
|
||||||
if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS)
|
if (OperatingSystem.CURRENT_OS == OperatingSystem.WINDOWS)
|
||||||
javaItem.getExtensionFilters().add(new FileChooser.ExtensionFilter("Java", "java.exe", "javaw.exe"));
|
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.bindBoolean(chkShowLogs, versionSetting.showLogsProperty());
|
||||||
FXUtils.bindEnum(cboLauncherVisibility, versionSetting.launcherVisibilityProperty());
|
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 -> {
|
javaItem.setToggleSelectedListener(newValue -> {
|
||||||
if (javaItem.isCustomToggle(newValue)) {
|
if (javaItem.isCustomToggle(newValue)) {
|
||||||
versionSetting.setJava("Custom");
|
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.javaDirProperty().setChangedListener(it -> initJavaSubtitle(versionSetting));
|
||||||
versionSetting.javaProperty().setChangedListener(it -> initJavaSubtitle(versionSetting));
|
versionSetting.javaProperty().setChangedListener(it -> initJavaSubtitle(versionSetting));
|
||||||
initJavaSubtitle(versionSetting);
|
initJavaSubtitle(versionSetting);
|
||||||
@@ -210,9 +197,33 @@ public final class VersionSettingsController {
|
|||||||
|
|
||||||
lastVersionSetting = versionSetting;
|
lastVersionSetting = versionSetting;
|
||||||
|
|
||||||
|
initializeSelectedJava();
|
||||||
|
|
||||||
loadIcon();
|
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) {
|
private void initJavaSubtitle(VersionSetting versionSetting) {
|
||||||
Task.of(variables -> variables.set("java", versionSetting.getJavaVersion()))
|
Task.of(variables -> variables.set("java", versionSetting.getJavaVersion()))
|
||||||
.subscribe(Task.of(Schedulers.javafx(),
|
.subscribe(Task.of(Schedulers.javafx(),
|
||||||
|
|||||||
@@ -165,6 +165,10 @@ public final class JavaVersion implements Serializable {
|
|||||||
private static List<JavaVersion> JAVAS;
|
private static List<JavaVersion> JAVAS;
|
||||||
private static final CountDownLatch LATCH = new CountDownLatch(1);
|
private static final CountDownLatch LATCH = new CountDownLatch(1);
|
||||||
|
|
||||||
|
public static Optional<List<JavaVersion>> getJREsImmediately() {
|
||||||
|
return Optional.ofNullable(JAVAS);
|
||||||
|
}
|
||||||
|
|
||||||
public static List<JavaVersion> getJREs() throws InterruptedException {
|
public static List<JavaVersion> getJREs() throws InterruptedException {
|
||||||
if (JAVAS != null)
|
if (JAVAS != null)
|
||||||
return JAVAS;
|
return JAVAS;
|
||||||
@@ -190,6 +194,19 @@ public final class JavaVersion implements Serializable {
|
|||||||
javaVersions = Collections.emptyList();
|
javaVersions = Collections.emptyList();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
boolean isCurrentJavaIncluded = false;
|
||||||
|
for (int i = 0; i < javaVersions.size(); i++) {
|
||||||
|
if (THIS_JAVA.getBinary().equals(javaVersions.get(i).getBinary())) {
|
||||||
|
javaVersions.set(i, THIS_JAVA);
|
||||||
|
isCurrentJavaIncluded = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!isCurrentJavaIncluded) {
|
||||||
|
javaVersions.add(THIS_JAVA);
|
||||||
|
}
|
||||||
|
|
||||||
JAVAS = Collections.unmodifiableList(javaVersions);
|
JAVAS = Collections.unmodifiableList(javaVersions);
|
||||||
LATCH.countDown();
|
LATCH.countDown();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user