fix #663: Incorrect judgment of WebView loading status

This commit is contained in:
Glavo
2021-12-18 15:40:46 +08:00
committed by Yuhui Huang
parent 4b258da0a0
commit 651fa6e2d1

View File

@@ -19,6 +19,7 @@ package org.jackhuang.hmcl.ui;
import com.jfoenix.controls.JFXButton; import com.jfoenix.controls.JFXButton;
import com.jfoenix.controls.JFXDialogLayout; import com.jfoenix.controls.JFXDialogLayout;
import javafx.concurrent.Worker;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.web.WebEngine; import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView; import javafx.scene.web.WebView;
@@ -41,23 +42,23 @@ public class UpgradeDialog extends JFXDialogLayout {
{ {
String url = CHANGELOG_URL + remoteVersion.getChannel().channelName + ".html"; String url = CHANGELOG_URL + remoteVersion.getChannel().channelName + ".html";
try {
WebView webView = new WebView(); WebView webView = new WebView();
webView.getEngine().setUserDataDirectory(Metadata.HMCL_DIRECTORY.toFile()); webView.getEngine().setUserDataDirectory(Metadata.HMCL_DIRECTORY.toFile());
try {
WebEngine engine = webView.getEngine(); WebEngine engine = webView.getEngine();
engine.load(CHANGELOG_URL + remoteVersion.getChannel().channelName); engine.load(url);
engine.getLoadWorker().stateProperty().addListener((observable, oldValue, newValue) -> { engine.getLoadWorker().stateProperty().addListener((observable, oldValue, newValue) -> {
String viewURL = engine.getLoadWorker().getMessage().trim(); if (newValue == Worker.State.FAILED) {
if (!viewURL.startsWith(CHANGELOG_URL)) { LOG.warning("Failed to load update log, trying to open it in browser");
engine.getLoadWorker().cancel(); FXUtils.openLink(url);
FXUtils.openLink(viewURL); setBody();
} }
}); });
setBody(webView);
} catch (NoClassDefFoundError | UnsatisfiedLinkError e) { } catch (NoClassDefFoundError | UnsatisfiedLinkError e) {
LOG.log(Level.WARNING, "WebView is missing or initialization failed", e); LOG.log(Level.WARNING, "WebView is missing or initialization failed", e);
FXUtils.openLink(url); FXUtils.openLink(url);
} }
setBody(webView);
} }
{ {