diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameLibrariesTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameLibrariesTask.java index 8675d1c53..9f51f32dc 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameLibrariesTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameLibrariesTask.java @@ -22,12 +22,14 @@ import org.jackhuang.hmcl.game.Library; import org.jackhuang.hmcl.game.Version; import org.jackhuang.hmcl.task.Task; import org.jackhuang.hmcl.util.Logging; +import org.jackhuang.hmcl.util.io.FileUtils; import java.io.File; import java.io.IOException; import java.nio.file.Path; import java.util.LinkedList; import java.util.List; +import java.util.jar.JarFile; import java.util.logging.Level; /** @@ -84,7 +86,18 @@ public final class GameLibrariesTask extends Task { if (!download && integrityCheck && !library.getDownload().validateChecksum(jar, true)) download = true; if (!download && integrityCheck && library.getChecksums() != null && !library.getChecksums().isEmpty() && - !LibraryDownloadTask.checksumValid(jar.toFile(), library.getChecksums())) download = true; + !LibraryDownloadTask.checksumValid(file, library.getChecksums())) download = true; + if (!download && integrityCheck) { + String ext = FileUtils.getExtension(file); + if (ext.equals("jar")) { + try (JarFile jarFile = new JarFile(file)) { + jarFile.getManifest(); + } catch (IOException ignored) { + // the Jar file is malformed, so re-download it. + download = true; + } + } + } } catch (IOException e) { Logging.LOG.log(Level.WARNING, "Unable to calc hash value of file " + jar, e); } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibraryDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibraryDownloadTask.java index 616e7e62e..b077df86c 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibraryDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/LibraryDownloadTask.java @@ -145,8 +145,9 @@ public class LibraryDownloadTask extends Task { task.addIntegrityCheckHandler((file, dest) -> { String ext = FileUtils.getExtension(dest).toLowerCase(); if (ext.equals("jar")) { - JarFile jarFile = new JarFile(file.toFile()); - jarFile.getManifest(); + try (JarFile jarFile = new JarFile(file.toFile())) { + jarFile.getManifest(); + } } }); xz = false;