From 7a788d1e6e9928e0498807a1e81a487625db31de Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Thu, 22 Feb 2018 15:02:12 +0800 Subject: [PATCH] cleanup --- .../hmcl/game/HMCLModpackManager.java | 5 +- .../jackhuang/hmcl/game/LauncherHelper.java | 6 +-- .../hmcl/setting/DownloadProviders.java | 2 +- .../org/jackhuang/hmcl/setting/Locales.java | 2 +- .../org/jackhuang/hmcl/setting/Proxies.java | 2 +- .../java/org/jackhuang/hmcl/ui/FXUtils.java | 11 ++-- .../java/org/jackhuang/hmcl/ui/LogWindow.java | 3 ++ .../java/org/jackhuang/hmcl/ui/MainPage.java | 2 + .../hmcl/ui/construct/ComponentListCell.java | 8 +-- .../hmcl/ui/construct/MessageBox.java | 2 + .../hmcl/ui/construct/MessageDialogPane.java | 2 + .../hmcl/upgrade/AppDataUpgrader.java | 5 +- .../AuthlibInjectorAccount.java | 3 +- .../hmcl/download/RemoteVersion.java | 2 +- .../hmcl/download/game/GameVersionList.java | 2 +- .../java/org/jackhuang/hmcl/event/Event.java | 37 +++++++++++-- .../jackhuang/hmcl/launch/Log4jHandler.java | 7 ++- .../java/org/jackhuang/hmcl/mod/ModInfo.java | 11 ++++ .../jackhuang/hmcl/task/FileDownloadTask.java | 5 +- .../jackhuang/hmcl/task/SchedulerImpl.java | 10 ++-- .../org/jackhuang/hmcl/util/Constants.java | 2 - .../org/jackhuang/hmcl/util/JavaVersion.java | 54 +++++++++---------- .../java/org/jackhuang/hmcl/util/Lang.java | 5 ++ .../java/org/jackhuang/hmcl/util/Logging.java | 4 +- 24 files changed, 121 insertions(+), 71 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackManager.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackManager.java index 9e750e492..8791b578d 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackManager.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/HMCLModpackManager.java @@ -21,6 +21,7 @@ import com.google.gson.JsonParseException; import org.jackhuang.hmcl.mod.Modpack; import org.jackhuang.hmcl.util.CompressingUtils; import org.jackhuang.hmcl.util.JsonUtils; +import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.StringUtils; import java.io.File; @@ -33,7 +34,7 @@ import java.util.List; */ public final class HMCLModpackManager { - public static final List MODPACK_BLACK_LIST = Arrays.asList( + public static final List MODPACK_BLACK_LIST = Lang.immutableListOf( "usernamecache.json", "usercache.json", // Minecraft "launcher_profiles.json", "launcher.pack.lzma", // Minecraft Launcher "pack.json", "launcher.jar", "hmclmc.log", // HMCL @@ -43,7 +44,7 @@ public final class HMCLModpackManager { "downloads", // Curse "asm", "backups", "TCNodeTracker", "CustomDISkins", "data" // Mods ); - public static final List MODPACK_SUGGESTED_BLACK_LIST = Arrays.asList( + public static final List MODPACK_SUGGESTED_BLACK_LIST = Lang.immutableListOf( "fonts", // BetterFonts "saves", "servers.dat", "options.txt", // Minecraft "blueprints" /* BuildCraft */, diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java index a67f3d1d1..9f5fe9c65 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/game/LauncherHelper.java @@ -221,10 +221,8 @@ public final class LauncherHelper { } public static void stopManagedProcesses() { - synchronized (PROCESSES) { - while (!PROCESSES.isEmpty()) - Optional.ofNullable(PROCESSES.poll()).ifPresent(ManagedProcess::stop); - } + while (!PROCESSES.isEmpty()) + Optional.ofNullable(PROCESSES.poll()).ifPresent(ManagedProcess::stop); } public void emitStatus(LoadingState state) { diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java index bd56232cf..d716827ca 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/DownloadProviders.java @@ -28,7 +28,7 @@ import java.util.List; public final class DownloadProviders { private DownloadProviders() {} - public static List DOWNLOAD_PROVIDERS = Arrays.asList(MojangDownloadProvider.INSTANCE, BMCLAPIDownloadProvider.INSTANCE); + public static final List DOWNLOAD_PROVIDERS = Lang.immutableListOf(MojangDownloadProvider.INSTANCE, BMCLAPIDownloadProvider.INSTANCE); public static DownloadProvider getDownloadProvider(int index) { return Lang.get(DOWNLOAD_PROVIDERS, index).orElse(MojangDownloadProvider.INSTANCE); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Locales.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Locales.java index b28b7c5d8..e5b625fed 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Locales.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Locales.java @@ -54,7 +54,7 @@ public final class Locales { */ public static final SupportedLocale RU = new SupportedLocale(new Locale("ru")); - public static final List LOCALES = Arrays.asList(DEFAULT, EN, ZH_CN); + public static final List LOCALES = Lang.immutableListOf(DEFAULT, EN, ZH_CN); public static SupportedLocale getLocale(int index) { return Lang.get(LOCALES, index).orElse(DEFAULT); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Proxies.java b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Proxies.java index 90abf311e..db174bff3 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/setting/Proxies.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/setting/Proxies.java @@ -29,7 +29,7 @@ import java.util.List; public final class Proxies { private Proxies() {} - public static final List PROXIES = Arrays.asList(Proxy.Type.DIRECT, Proxy.Type.HTTP, Proxy.Type.SOCKS); + public static final List PROXIES = Lang.immutableListOf(Proxy.Type.DIRECT, Proxy.Type.HTTP, Proxy.Type.SOCKS); public static Proxy.Type getProxyType(int index) { return Lang.get(PROXIES, index).orElse(null); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java index 78aadfebe..b8ddba831 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/FXUtils.java @@ -42,10 +42,7 @@ import javafx.scene.layout.Region; import javafx.scene.shape.Rectangle; import javafx.util.Duration; import org.jackhuang.hmcl.Main; -import org.jackhuang.hmcl.util.ExceptionalSupplier; -import org.jackhuang.hmcl.util.Lang; -import org.jackhuang.hmcl.util.Logging; -import org.jackhuang.hmcl.util.OperatingSystem; +import org.jackhuang.hmcl.util.*; import java.io.File; import java.io.IOException; @@ -223,7 +220,11 @@ public final class FXUtils { } public static void openFolder(File file) { - file.mkdirs(); + if (!FileUtils.makeDirectory(file)) { + Logging.LOG.log(Level.SEVERE, "Unable to make directory " + file); + return; + } + String path = file.getAbsolutePath(); switch (OperatingSystem.CURRENT_OS) { 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 b6589527d..1547b138e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/LogWindow.java @@ -138,6 +138,9 @@ public final class LogWindow extends Stage { case DEBUG: debug.set(debug.get() + 1); break; + default: + // ignore + break; } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/MainPage.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/MainPage.java index f1374017d..ab8ac08c1 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/MainPage.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/MainPage.java @@ -216,6 +216,8 @@ public final class MainPage extends StackPane implements DecoratorPage { case 3: FXUtils.openFolder(profile.getRepository().getRunDirectory(rightClickedVersion)); break; + default: + throw new Error(); } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentListCell.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentListCell.java index d18a304b4..bae1fe04b 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentListCell.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/ComponentListCell.java @@ -41,7 +41,6 @@ public class ComponentListCell extends StackPane { private final Node content; private Animation expandAnimation; private Rectangle clipRect; - private double animatedHeight; private final BooleanProperty expanded = new SimpleBooleanProperty(this, "expanded", false); public ComponentListCell(Node content) { @@ -129,18 +128,13 @@ public class ComponentListCell extends StackPane { updateClip(newHeight); } - animatedHeight = newAnimatedHeight; - expandAnimation = new Timeline(new KeyFrame(new Duration(320.0), new KeyValue(container.minHeightProperty(), contentHeight, FXUtils.SINE), new KeyValue(container.maxHeightProperty(), contentHeight, FXUtils.SINE) )); if (!isExpanded()) { - expandAnimation.setOnFinished(e2 -> { - updateClip(newHeight); - animatedHeight = 0.0; - }); + expandAnimation.setOnFinished(e2 -> updateClip(newHeight)); } expandAnimation.play(); diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageBox.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageBox.java index 8321ba075..71402e1ad 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageBox.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageBox.java @@ -137,6 +137,8 @@ public final class MessageBox { case OK_CANCEL_OPTION: alert.getButtonTypes().setAll(ButtonType.OK, ButtonType.CANCEL); break; + default: + throw new IllegalArgumentException("Unrecognized message box option " + option); } Optional buttonType = alert.showAndWait(); if (!buttonType.isPresent()) return CLOSED_OPTION; diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageDialogPane.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageDialogPane.java index 5b17ae8a6..bb787278e 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageDialogPane.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/construct/MessageDialogPane.java @@ -76,6 +76,8 @@ public final class MessageDialogPane extends StackPane { case MessageBox.QUESTION_MESSAGE: graphic.setGraphic(SVG.helpCircle("black", 40, 40)); break; + default: + throw new IllegalArgumentException("Unrecognized message box message type " + type); } } diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/AppDataUpgrader.java b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/AppDataUpgrader.java index 1fb1d2ce3..12df8ecb2 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/AppDataUpgrader.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/upgrade/AppDataUpgrader.java @@ -17,6 +17,7 @@ */ package org.jackhuang.hmcl.upgrade; +import com.google.gson.JsonParseException; import com.google.gson.JsonSyntaxException; import com.google.gson.reflect.TypeToken; import org.jackhuang.hmcl.Main; @@ -84,10 +85,10 @@ public class AppDataUpgrader extends IUpgrader { } } } - } catch (JsonSyntaxException ex) { + } catch (JsonParseException ex) { f.delete(); } catch (IOException | PrivilegedActionException t) { - Logging.LOG.log(Level.SEVERE, "Failed to execute newer version application", t); + Logging.LOG.log(Level.SEVERE, "Unable to execute newer version application", t); } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorAccount.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorAccount.java index 3f173e94b..8b1839f56 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorAccount.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/auth/authlibinjector/AuthlibInjectorAccount.java @@ -25,6 +25,7 @@ import org.jackhuang.hmcl.auth.yggdrasil.YggdrasilService; import org.jackhuang.hmcl.auth.yggdrasil.YggdrasilSession; import org.jackhuang.hmcl.game.Arguments; import org.jackhuang.hmcl.task.GetTask; +import org.jackhuang.hmcl.util.Charsets; import org.jackhuang.hmcl.util.ExceptionalSupplier; import org.jackhuang.hmcl.util.Lang; import org.jackhuang.hmcl.util.NetworkUtils; @@ -68,7 +69,7 @@ public class AuthlibInjectorAccount extends YggdrasilAccount { Arguments arguments = Arguments.addJVMArguments(null, arg); if (flag.get()) - arguments = Arguments.addJVMArguments(arguments, "-Dorg.to2mbn.authlibinjector.config.prefetched=" + new String(Base64.getEncoder().encode(getTask.getResult().getBytes()))); + arguments = Arguments.addJVMArguments(arguments, "-Dorg.to2mbn.authlibinjector.config.prefetched=" + new String(Base64.getEncoder().encode(getTask.getResult().getBytes()), Charsets.UTF_8)); return info.setArguments(arguments); } catch (Exception e) { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/RemoteVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/RemoteVersion.java index 94d6fa10a..d4a3ead98 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/RemoteVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/RemoteVersion.java @@ -77,6 +77,6 @@ public class RemoteVersion implements Comparable> { @Override public int compareTo(RemoteVersion o) { // newer versions are smaller than older versions - return -VersionNumber.asVersion(selfVersion).compareTo(VersionNumber.asVersion(o.selfVersion)); + return VersionNumber.asVersion(o.selfVersion).compareTo(VersionNumber.asVersion(selfVersion)); } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameVersionList.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameVersionList.java index 94b262931..da9135ee6 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameVersionList.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/download/game/GameVersionList.java @@ -72,7 +72,7 @@ public final class GameVersionList extends VersionList { @Override public int compareTo(RemoteVersion o) { - return -getTag().getTime().compareTo(o.getTag().getTime()); + return o.getTag().getTime().compareTo(getTag().getTime()); } } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/event/Event.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/event/Event.java index 68eb7c5e4..248334cc8 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/event/Event.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/event/Event.java @@ -17,16 +17,47 @@ */ package org.jackhuang.hmcl.event; -import java.util.EventObject; +import java.util.Objects; /** * * @author huangyuhui */ -public class Event extends EventObject { +public class Event { + /** + * The object on which the Event initially occurred. + */ + protected transient Object source; + + /** + * Constructs a prototypical Event. + * + * @param source The object on which the Event initially occurred. + * @throws NullPointerException if source is null. + */ public Event(Object source) { - super(source); + Objects.requireNonNull(source); + + this.source = source; + } + + /** + * The object on which the Event initially occurred. + * + * @return The object on which the Event initially occurred. + */ + public Object getSource() { + return source; + } + + /** + * Returns a String representation of this Event. + * + * @return A a String representation of this Event. + */ + public String toString() { + return getClass().getName() + "[source=" + source + "]"; } private boolean canceled; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/Log4jHandler.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/Log4jHandler.java index 106387d65..d14e3ed26 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/Log4jHandler.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/launch/Log4jHandler.java @@ -30,6 +30,7 @@ import java.io.IOException; import java.io.InterruptedIOException; import java.io.PipedInputStream; import java.io.PipedOutputStream; +import java.text.SimpleDateFormat; import java.util.Date; import java.util.LinkedList; import java.util.List; @@ -114,6 +115,8 @@ final class Log4jHandler extends Thread { private class Log4jHandlerImpl extends DefaultHandler { + private final SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); + private String date = "", thread = "", logger = ""; private StringBuilder message; private Log4jLevel level; @@ -124,8 +127,8 @@ final class Log4jHandler extends Thread { switch (localName) { case "log4j_Event": message = new StringBuilder(); - Date d = new Date(Long.valueOf(attributes.getValue("timestamp"))); - date = Constants.DEFAULT_DATE_FORMAT.format(d); + Date d = new Date(Long.parseLong(attributes.getValue("timestamp"))); + date = format.format(d); try { level = Log4jLevel.valueOf(attributes.getValue("level")); } catch (IllegalArgumentException e) { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModInfo.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModInfo.java index e09613627..45216a3f6 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModInfo.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/mod/ModInfo.java @@ -23,6 +23,7 @@ import org.jackhuang.hmcl.util.Logging; import org.jackhuang.hmcl.util.StringUtils; import java.io.File; +import java.util.Objects; /** * @@ -125,6 +126,16 @@ public final class ModInfo implements Comparable { return getFileName().compareTo(o.getFileName()); } + @Override + public boolean equals(Object obj) { + return obj instanceof ModInfo && Objects.equals(getFileName(), ((ModInfo) obj).getFileName()); + } + + @Override + public int hashCode() { + return Objects.hash(getFileName()); + } + public static boolean isFileMod(File file) { String name = file.getName(); if (isDisabled(file)) diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FileDownloadTask.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FileDownloadTask.java index 9723660c8..56310f86d 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FileDownloadTask.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/FileDownloadTask.java @@ -126,10 +126,7 @@ public class FileDownloadTask extends Task { if (repeat > 0) { FailedEvent event = new FailedEvent<>(this, repeat, currentURL); onFailed.fireEvent(event); - if (!currentURL.equals(event.getNewResult())) { - Logging.LOG.log(Level.FINE, "Switch from {0} to {1}", new Object[] { currentURL, event.getNewResult() }); - currentURL = event.getNewResult(); - } + currentURL = event.getNewResult(); } if (Thread.interrupted()) { Thread.currentThread().interrupt(); diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SchedulerImpl.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SchedulerImpl.java index fd60ab640..989b892ba 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SchedulerImpl.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/task/SchedulerImpl.java @@ -19,10 +19,7 @@ package org.jackhuang.hmcl.task; import org.jackhuang.hmcl.util.ExceptionalRunnable; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.ExecutionException; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; +import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; @@ -84,8 +81,9 @@ class SchedulerImpl extends Scheduler { } @Override - public Void get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException { - latch.await(timeout, unit); + public Void get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { + if (!latch.await(timeout, unit)) + throw new TimeoutException(); return getImpl(); } }; diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Constants.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Constants.java index fbd2e0724..00c5708f2 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Constants.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Constants.java @@ -52,8 +52,6 @@ public final class Constants { public static final String DEFAULT_VERSION_DOWNLOAD_URL = "http://s3.amazonaws.com/Minecraft.Download/versions/"; public static final String DEFAULT_INDEX_URL = "http://s3.amazonaws.com/Minecraft.Download/indexes/"; - public static final SimpleDateFormat DEFAULT_DATE_FORMAT = new SimpleDateFormat("HH:mm:ss"); - public static Consumer UI_THREAD_SCHEDULER = s -> Schedulers.computation().schedule(s::run); public static final Consumer SWING_UI_THREAD_SCHEDULER = s -> { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/JavaVersion.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/JavaVersion.java index 29640cb70..add4817ad 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/JavaVersion.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/JavaVersion.java @@ -107,14 +107,14 @@ public final class JavaVersion implements Serializable { try { Process process = new ProcessBuilder(actualFile.getAbsolutePath(), "-version").start(); process.waitFor(); - BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream())); - String line; - while ((line = reader.readLine()) != null) { - Matcher m = REGEX.matcher(line); - if (m.find()) - version = m.group("version"); - if (line.contains("64-Bit")) - platform = Platform.BIT_64; + try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getErrorStream()))) { + for (String line; (line = reader.readLine()) != null; ) { + Matcher m = REGEX.matcher(line); + if (m.find()) + version = m.group("version"); + if (line.contains("64-Bit")) + platform = Platform.BIT_64; + } } } catch (InterruptedException e) { throw new IOException("Interrupted scanning the java version.", e); @@ -217,11 +217,11 @@ public final class JavaVersion implements Serializable { Process process = Runtime.getRuntime().exec(cmd); process.waitFor(); - BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); - String line; - while ((line = reader.readLine()) != null) - if (line.startsWith(location) && !line.equals(location)) - res.add(line); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) { + for (String line; (line = reader.readLine()) != null; ) + if (line.startsWith(location) && !line.equals(location)) + res.add(line); + } return res; } @@ -241,22 +241,22 @@ public final class JavaVersion implements Serializable { Process process = Runtime.getRuntime().exec(cmd); process.waitFor(); - BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); - String line; - while ((line = reader.readLine()) != null) - if (StringUtils.isNotBlank(line)) { - if (last && line.trim().startsWith(name)) { - int begins = line.indexOf(name); - if (begins > 0) { - String s2 = line.substring(begins + name.length()); - begins = s2.indexOf("REG_SZ"); - if (begins > 0) - return s2.substring(begins + "REG_SZ".length()).trim(); + try (BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()))) { + for (String line; (line = reader.readLine()) != null; ) + if (StringUtils.isNotBlank(line)) { + if (last && line.trim().startsWith(name)) { + int begins = line.indexOf(name); + if (begins > 0) { + String s2 = line.substring(begins + name.length()); + begins = s2.indexOf("REG_SZ"); + if (begins > 0) + return s2.substring(begins + "REG_SZ".length()).trim(); + } } + if (location.equals(line.trim())) + last = true; } - if (location.equals(line.trim())) - last = true; - } + } return null; } } diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Lang.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Lang.java index 49089c7c7..845eea10a 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Lang.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Lang.java @@ -47,6 +47,11 @@ public final class Lang { return map; } + @SafeVarargs + public static List immutableListOf(T... elements) { + return Collections.unmodifiableList(Arrays.asList(elements)); + } + public static V computeIfAbsent(Map map, K key, Supplier computingFunction) { V value = map.get(key); if (value == null) { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Logging.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Logging.java index d95c4f95a..6e1005bb8 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Logging.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/Logging.java @@ -21,6 +21,7 @@ import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.text.MessageFormat; +import java.text.SimpleDateFormat; import java.util.Date; import java.util.logging.*; @@ -55,10 +56,11 @@ public final class Logging { static final class DefaultFormatter extends Formatter { static final DefaultFormatter INSTANCE = new DefaultFormatter(); + private final SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); @Override public String format(LogRecord record) { - String date = Constants.DEFAULT_DATE_FORMAT.format(new Date(record.getMillis())); + String date = format.format(new Date(record.getMillis())); String log = String.format("[%s] [%s.%s/%s] %s%n", date, record.getSourceClassName(), record.getSourceMethodName(), record.getLevel().getName(), MessageFormat.format(record.getMessage(), record.getParameters())