diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java index 0a9ba9e43..e5aecd613 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/Launcher.java @@ -28,7 +28,6 @@ import org.jackhuang.hmcl.setting.ConfigHolder; import org.jackhuang.hmcl.setting.SambaException; import org.jackhuang.hmcl.task.AsyncTaskExecutor; import org.jackhuang.hmcl.task.Schedulers; -import org.jackhuang.hmcl.ui.AwtUtils; import org.jackhuang.hmcl.ui.Controllers; import org.jackhuang.hmcl.upgrade.UpdateChecker; import org.jackhuang.hmcl.upgrade.UpdateHandler; @@ -130,9 +129,6 @@ public final class Launcher extends Application { Platform.setImplicitExit(false); Controllers.initialize(primaryStage); - if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) - initIcon(); - UpdateChecker.init(); primaryStage.show(); @@ -148,11 +144,6 @@ public final class Launcher extends Application { Controllers.onApplicationStop(); } - private void initIcon() { - java.awt.Image image = java.awt.Toolkit.getDefaultToolkit().getImage(Launcher.class.getResource("/assets/img/icon.png")); - AwtUtils.setAppleIcon(image); - } - public static void main(String[] args) { if (UpdateHandler.processArguments(args)) { return; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/Main.java b/HMCL/src/main/java/org/jackhuang/hmcl/Main.java index 26c0f1e5a..ff6ac4cb0 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/Main.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/Main.java @@ -19,11 +19,13 @@ package org.jackhuang.hmcl; import javafx.application.Platform; import javafx.scene.control.Alert; +import org.jackhuang.hmcl.ui.AwtUtils; import org.jackhuang.hmcl.util.Logging; import org.jackhuang.hmcl.util.SelfDependencyPatcher; import org.jackhuang.hmcl.ui.SwingUtils; import org.jackhuang.hmcl.util.platform.Architecture; import org.jackhuang.hmcl.util.platform.JavaVersion; +import org.jackhuang.hmcl.util.platform.OperatingSystem; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; @@ -65,6 +67,9 @@ public final class Main { // This environment check will take ~300ms thread(Main::fixLetsEncrypt, "CA Certificate Check", true); + if (OperatingSystem.CURRENT_OS == OperatingSystem.OSX) + initIcon(); + Logging.start(Metadata.HMCL_DIRECTORY.resolve("logs")); checkJavaFX(); @@ -72,6 +77,11 @@ public final class Main { Launcher.main(args); } + private static void initIcon() { + java.awt.Image image = java.awt.Toolkit.getDefaultToolkit().getImage(Main.class.getResource("/assets/img/icon@8x.png")); + AwtUtils.setAppleIcon(image); + } + private static void checkDirectoryPath() { String currentDirectory = new File("").getAbsolutePath(); if (currentDirectory.contains("!")) { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/AwtUtils.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/AwtUtils.java index fc5335a63..1efb3e929 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/AwtUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/AwtUtils.java @@ -9,8 +9,8 @@ public final class AwtUtils { public static void setAppleIcon(Image image) { try { - Class taskbarClass = Class.forName("java.awt.TaskBar"); - Method getTaskBarMethod = taskbarClass.getDeclaredMethod("getTaskBar"); + Class taskbarClass = Class.forName("java.awt.Taskbar"); + Method getTaskBarMethod = taskbarClass.getDeclaredMethod("getTaskbar"); Object taskBar = getTaskBarMethod.invoke(null); Method setIconImageMethod = taskbarClass.getDeclaredMethod("setIconImage", Image.class); setIconImageMethod.invoke(taskBar, image); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java index 3cf4ef939..111fb82d8 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/main/MainPage.java @@ -57,7 +57,10 @@ import org.jackhuang.hmcl.upgrade.UpdateChecker; import org.jackhuang.hmcl.upgrade.UpdateHandler; import org.jackhuang.hmcl.util.javafx.BindingMapping; import org.jackhuang.hmcl.util.javafx.MappedObservableList; +import org.jackhuang.hmcl.util.platform.JavaVersion; +import java.io.IOException; +import java.io.InputStream; import java.util.List; import java.util.Objects; import java.util.stream.IntStream; @@ -89,7 +92,16 @@ public final class MainPage extends StackPane implements DecoratorPage { titleNode.setAlignment(Pos.CENTER_LEFT); ImageView titleIcon = new ImageView(); - titleIcon.setImage(new Image("/assets/img/icon.png", 20, 20, false, false)); + if (JavaVersion.CURRENT_JAVA.getParsedVersion() < 9) { + // JavaFX 8 has some problems with @2x images + // Force load the original icon + try (InputStream is = MainPage.class.getResourceAsStream("/assets/img/icon.png")) { + titleIcon.setImage(new Image(is, 20, 20, false, false)); + } catch (IOException ignored) { + } + } else { + titleIcon.setImage(new Image("/assets/img/icon.png", 20, 20, false, false)); + } Label titleLabel = new Label(Metadata.FULL_TITLE); titleLabel.getStyleClass().add("jfx-decorator-title"); diff --git a/HMCL/src/main/resources/assets/img/icon@2x.png b/HMCL/src/main/resources/assets/img/icon@2x.png new file mode 100644 index 000000000..315610ada Binary files /dev/null and b/HMCL/src/main/resources/assets/img/icon@2x.png differ diff --git a/HMCL/src/main/resources/assets/img/icon@8x.png b/HMCL/src/main/resources/assets/img/icon@8x.png new file mode 100644 index 000000000..921080e51 Binary files /dev/null and b/HMCL/src/main/resources/assets/img/icon@8x.png differ