mirror of
https://github.com/HMCL-dev/HMCL.git
synced 2025-09-14 06:17:47 -04:00
fix: Check whether java 16 is chosen when launching 1.17 and javaVersion is not defined in version json.
This commit is contained in:
parent
53c63db150
commit
fe922e0bed
@ -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()
|
||||
|
@ -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, "");
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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.
|
||||
|
@ -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=加载版本列表失败,点击此处重试。
|
||||
|
Loading…
x
Reference in New Issue
Block a user