From 974cba8dee8b642f9588ff3306bac2d93dc32372 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Thu, 25 Apr 2019 13:56:44 +0800 Subject: [PATCH] Suppress NPE in LogWindow --- .../java/org/jackhuang/hmcl/game/TexturesLoader.java | 11 ++++------- .../main/java/org/jackhuang/hmcl/setting/Theme.java | 3 ++- .../main/java/org/jackhuang/hmcl/ui/LogWindow.java | 3 ++- .../jackhuang/hmcl/util/ResourceNotFoundError.java | 9 +++++++++ 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/TexturesLoader.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/TexturesLoader.java index 68aa09c98..f73fd2019 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/TexturesLoader.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/TexturesLoader.java @@ -132,15 +132,12 @@ public final class TexturesLoader { // ==== Skins ==== private final static Map DEFAULT_SKINS = new EnumMap<>(TextureModel.class); static { - try { - loadDefaultSkin("/assets/img/steve.png", TextureModel.STEVE); - loadDefaultSkin("/assets/img/alex.png", TextureModel.ALEX); - } catch (UncheckedIOException e) { - throw new ResourceNotFoundError("Steve and alex default skin image is not found"); - } + loadDefaultSkin("/assets/img/steve.png", TextureModel.STEVE); + loadDefaultSkin("/assets/img/alex.png", TextureModel.ALEX); } + private static void loadDefaultSkin(String path, TextureModel model) { - try (InputStream in = TexturesLoader.class.getResourceAsStream(path)) { + try (InputStream in = ResourceNotFoundError.getResourceAsStream(path)) { DEFAULT_SKINS.put(model, new LoadedTexture(ImageIO.read(in), singletonMap("model", model.modelName))); } catch (IOException e) { throw new UncheckedIOException(e); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java index 9d592ca80..95bc511b9 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Theme.java @@ -25,6 +25,7 @@ import javafx.beans.binding.ObjectBinding; import javafx.scene.paint.Color; import org.jackhuang.hmcl.util.Logging; +import org.jackhuang.hmcl.util.ResourceNotFoundError; import org.jackhuang.hmcl.util.io.FileUtils; import org.jackhuang.hmcl.util.io.IOUtils; import org.jackhuang.hmcl.util.javafx.BindingMapping; @@ -81,7 +82,7 @@ public class Theme { String css; try { File temp = File.createTempFile("hmcl", ".css"); - FileUtils.writeText(temp, IOUtils.readFullyAsString(Theme.class.getResourceAsStream("/assets/css/custom.css")) + FileUtils.writeText(temp, IOUtils.readFullyAsString(ResourceNotFoundError.getResourceAsStream("/assets/css/custom.css")) .replace("%base-color%", color) .replace("%font-color%", getColorDisplayName(getForegroundColor()))); css = temp.toURI().toString(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java index 107061b6c..0a0493803 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java @@ -34,6 +34,7 @@ import org.jackhuang.hmcl.event.EventManager; import org.jackhuang.hmcl.game.LauncherHelper; import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.Log4jLevel; +import org.jackhuang.hmcl.util.ResourceNotFoundError; import org.jackhuang.hmcl.util.StringUtils; import org.jackhuang.hmcl.util.io.IOUtils; import org.w3c.dom.Document; @@ -174,7 +175,7 @@ public final class LogWindow extends Stage { FXUtils.loadFXML(this, "/assets/fxml/log.fxml"); engine = webView.getEngine(); - engine.loadContent(Lang.ignoringException(() -> IOUtils.readFullyAsString(getClass().getResourceAsStream("/assets/log-window-content.html"))) + engine.loadContent(Lang.ignoringException(() -> IOUtils.readFullyAsString(ResourceNotFoundError.getResourceAsStream("/assets/log-window-content.html"))) .replace("${FONT}", config().getFontSize() + "px \"" + config().getFontFamily() + "\"")); engine.getLoadWorker().stateProperty().addListener((a, b, newValue) -> { if (newValue == Worker.State.SUCCEEDED) { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/ResourceNotFoundError.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/ResourceNotFoundError.java index 57155a2f5..e952e8d73 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/ResourceNotFoundError.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/ResourceNotFoundError.java @@ -17,6 +17,8 @@ */ package org.jackhuang.hmcl.util; +import java.io.InputStream; + /** * Suppress the throwable when we make sure the resource cannot miss. * @see CrashReporter @@ -29,4 +31,11 @@ public class ResourceNotFoundError extends Error { public ResourceNotFoundError(String message, Throwable cause) { super(message, cause); } + + public static InputStream getResourceAsStream(String url) { + InputStream stream = ResourceNotFoundError.class.getResourceAsStream(url); + if (stream == null) + throw new ResourceNotFoundError("Resource not found: " + url); + return stream; + } }