diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/decorator/DecoratorController.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/decorator/DecoratorController.java index ca2b973a2..6ae116ebd 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/decorator/DecoratorController.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/decorator/DecoratorController.java @@ -61,10 +61,12 @@ import java.util.Random; import java.util.logging.Level; import java.util.stream.Stream; +import static java.util.logging.Level.WARNING; import static java.util.stream.Collectors.toList; import static org.jackhuang.hmcl.setting.ConfigHolder.config; import static org.jackhuang.hmcl.ui.FXUtils.newImage; import static org.jackhuang.hmcl.util.Logging.LOG; +import static org.jackhuang.hmcl.util.io.FileUtils.getExtension; public class DecoratorController { private static final String PROPERTY_DIALOG_CLOSE_HANDLER = DecoratorController.class.getName() + ".dialog.closeListener"; @@ -174,10 +176,10 @@ public class DecoratorController { List candidates; try (Stream stream = Files.list(imageDir)) { candidates = stream - .filter(Files::isRegularFile) + .filter(Files::isReadable) .filter(it -> { - String filename = it.getFileName().toString(); - return filename.endsWith(".png") || filename.endsWith(".jpg"); + String ext = getExtension(it).toLowerCase(); + return ext.equals("png") || ext.equals("jpg"); }) .collect(toList()); } catch (IOException e) { @@ -199,13 +201,23 @@ public class DecoratorController { } private Optional tryLoadImage(Path path) { - if (Files.isRegularFile(path)) { - try { - return Optional.of(new Image(path.toAbsolutePath().toUri().toString())); - } catch (IllegalArgumentException ignored) { - } + if (!Files.isReadable(path)) + return Optional.empty(); + + Image img; + try { + img = new Image(path.toAbsolutePath().toUri().toString()); + } catch (IllegalArgumentException e) { + LOG.log(WARNING, "Couldn't load background image", e); + return Optional.empty(); } - return Optional.empty(); + + if (img.getException() != null) { + LOG.log(WARNING, "Couldn't load background image", img.getException()); + return Optional.empty(); + } + + return Optional.of(img); } // ==== Navigation ====