fix: Check whether java 16 is chosen when launching 1.17 and javaVersion is not defined in version json.

This commit is contained in:
huanghongxun 2021-08-04 01:52:16 +08:00
parent 53c63db150
commit fe922e0bed
5 changed files with 55 additions and 2 deletions

View File

@ -17,6 +17,7 @@
*/
package org.jackhuang.hmcl.game;
import com.jfoenix.controls.JFXButton;
import javafx.application.Platform;
import javafx.stage.Stage;
import org.jackhuang.hmcl.Launcher;
@ -47,6 +48,7 @@ import org.jackhuang.hmcl.setting.VersionSetting;
import org.jackhuang.hmcl.task.*;
import org.jackhuang.hmcl.ui.Controllers;
import org.jackhuang.hmcl.ui.DialogController;
import org.jackhuang.hmcl.ui.FXUtils;
import org.jackhuang.hmcl.ui.LogWindow;
import org.jackhuang.hmcl.ui.construct.DialogCloseEvent;
import org.jackhuang.hmcl.ui.construct.MessageDialogPane.MessageType;
@ -326,7 +328,11 @@ public final class LauncherHelper {
if (acceptableJava.isPresent()) {
setting.setJavaVersion(acceptableJava.get());
} else {
Controllers.confirm(i18n("launch.advice.require_newer_java_version", gameVersion.toString(), version.getJavaVersion().getMajorVersion()), i18n("message.warning"), () -> {
JFXButton linkButton = new JFXButton(i18n("download.external_link"));
linkButton.setOnAction(e -> FXUtils.openLink("https://adoptopenjdk.net/"));
linkButton.getStyleClass().add("dialog-accept");
JFXButton yesButton = new JFXButton(i18n("button.ok"));
yesButton.setOnAction(event -> {
downloadJava(version.getJavaVersion(), profile)
.thenAcceptAsync(x -> {
try {
@ -338,12 +344,38 @@ public final class LauncherHelper {
LOG.log(Level.SEVERE, "Cannot list javas", e);
}
}, Platform::runLater).thenAccept(x -> onAccept.run());
}, null);
});
yesButton.getStyleClass().add("dialog-accept");
JFXButton noButton = new JFXButton(i18n("button.cancel"));
noButton.getStyleClass().add("dialog-cancel");
Controllers.dialogWithButtons(
i18n("launch.advice.require_newer_java_version",
gameVersion.toString(),
version.getJavaVersion().getMajorVersion()),
i18n("message.warning"),
MessageType.QUESTION,
linkButton, yesButton, noButton);
flag = true;
}
}
}
// Game later than 1.17 requires Java 16.
if (!flag && java.getParsedVersion() < JavaVersion.JAVA_16 && gameVersion.compareTo(VersionNumber.asVersion("1.17")) >= 0) {
Optional<JavaVersion> acceptableJava = JavaVersion.getJavas().stream()
.filter(javaVersion -> javaVersion.getParsedVersion() >= JavaVersion.JAVA_16)
.max(Comparator.comparing(JavaVersion::getVersionNumber));
if (acceptableJava.isPresent()) {
setting.setJavaVersion(acceptableJava.get());
} else {
Controllers.confirm(i18n("launch.advice.require_newer_java_version", gameVersion.toString(), 16), i18n("message.warning"), () -> {
FXUtils.openLink("https://adoptopenjdk.net/");
}, null);
}
flag = true;
}
// Game later than 1.7.2 accepts Java 8.
if (!flag && java.getParsedVersion() < JavaVersion.JAVA_8 && gameVersion.compareTo(VersionNumber.asVersion("1.7.2")) > 0) {
Optional<JavaVersion> java8 = JavaVersion.getJavas().stream()

View File

@ -17,6 +17,7 @@
*/
package org.jackhuang.hmcl.ui;
import com.jfoenix.controls.JFXButton;
import javafx.beans.property.DoubleProperty;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.scene.Node;
@ -205,6 +206,10 @@ public final class Controllers {
dialog(new MessageDialogPane(text, title, type, onAccept, onCancel));
}
public static void dialogWithButtons(String text, String title, MessageType type, JFXButton... buttons) {
dialog(MessageDialogPane.fromButtons(text, title, type, buttons));
}
public static CompletableFuture<String> prompt(String title, FutureCallback<String> onResult) {
return prompt(title, onResult, "");
}

View File

@ -20,6 +20,7 @@ package org.jackhuang.hmcl.ui.construct;
import com.jfoenix.controls.JFXButton;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.StackPane;
import org.jackhuang.hmcl.setting.Theme;
@ -102,4 +103,17 @@ public final class MessageDialogPane extends StackPane {
actions.getChildren().add(cancelButton);
}
public static MessageDialogPane fromButtons(String text, String title, MessageType type, JFXButton[] buttons) {
MessageDialogPane pane = new MessageDialogPane(text, title, type, null);
for (JFXButton button : buttons) {
button.addEventHandler(MouseEvent.MOUSE_CLICKED, e -> {
pane.fireEvent(new DialogCloseEvent());
});
}
pane.actions.getChildren().setAll(buttons);
return pane;
}
}

View File

@ -168,6 +168,7 @@ curse.sort.total_downloads=Total Downloads
download=Download
download.code.404=File not found on the remote server: %s
download.external_link=Open Download Site
download.failed=Failed to download %1$s, response code: %2$d
download.failed.empty=No candidates. Click here to return.
download.failed.refresh=Unable to download version list. Click here to retry.

View File

@ -168,6 +168,7 @@ curse.sort.total_downloads=下载量
download=下载
download.code.404=远程服务器不包含需要下载的文件: %s
download.external_link=打开下载网站
download.failed=下载失败: %1$s错误码%2$d
download.failed.empty=没有可供安装的版本,点击此处返回。
download.failed.refresh=加载版本列表失败,点击此处重试。