diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/LocalServerBroadcaster.java b/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/LocalServerBroadcaster.java index 77b824765..bdb105a39 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/LocalServerBroadcaster.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/ui/multiplayer/LocalServerBroadcaster.java @@ -44,7 +44,12 @@ public class LocalServerBroadcaster implements AutoCloseable { public LocalServerBroadcaster(String address) { this.address = address; - this.threadGroup.setDaemon(true); + } + + private Thread newThread(Runnable task, String name) { + Thread thread = new Thread(threadGroup, task, name); + thread.setDaemon(true); + return thread; } @Override @@ -64,7 +69,7 @@ public class LocalServerBroadcaster implements AutoCloseable { public static final Pattern ADDRESS_PATTERN = Pattern.compile("^\\s*(\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}):(\\d{1,5})\\s*$"); public void start() { - Thread forwardPortThread = new Thread(threadGroup, this::forwardPort, "ForwardPort"); + Thread forwardPortThread = newThread(this::forwardPort, "ForwardPort"); forwardPortThread.start(); } @@ -81,7 +86,7 @@ public class LocalServerBroadcaster implements AutoCloseable { serverSocket.bind(null); - Thread broadcastMOTDThread = new Thread(threadGroup, () -> broadcastMOTD(serverSocket.getLocalPort()), "BroadcastMOTD"); + Thread broadcastMOTDThread = newThread(() -> broadcastMOTD(serverSocket.getLocalPort()), "BroadcastMOTD"); broadcastMOTDThread.start(); LOG.log(Level.INFO, "Listening " + serverSocket.getLocalSocketAddress()); @@ -89,8 +94,8 @@ public class LocalServerBroadcaster implements AutoCloseable { while (running) { Socket forwardedSocket = serverSocket.accept(); LOG.log(Level.INFO, "Accepting client"); - new Thread(threadGroup, () -> forwardTraffic(forwardingSocket, forwardedSocket), "Forward S->D").start(); - new Thread(threadGroup, () -> forwardTraffic(forwardedSocket, forwardingSocket), "Forward D->S").start(); + newThread(() -> forwardTraffic(forwardingSocket, forwardedSocket), "Forward S->D").start(); + newThread(() -> forwardTraffic(forwardedSocket, forwardingSocket), "Forward D->S").start(); } } } catch (IOException | UnresolvedAddressException e) { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/BindingMapping.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/BindingMapping.java index 98d7508e6..897c86270 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/BindingMapping.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/javafx/BindingMapping.java @@ -47,22 +47,22 @@ public abstract class BindingMapping extends ObjectBinding { return of(Bindings.createObjectBinding(() -> mapper.apply(watched), watched)); } - protected final ObservableValue predecessor; + protected final ObservableValue predecessor; - public BindingMapping(ObservableValue predecessor) { + public BindingMapping(ObservableValue predecessor) { this.predecessor = requireNonNull(predecessor); bind(predecessor); } - public BindingMapping map(Function mapper) { + public BindingMapping map(Function mapper) { return new MappedBinding<>(this, mapper); } - public BindingMapping flatMap(Function> mapper) { + public BindingMapping flatMap(Function> mapper) { return flatMap(mapper, null); } - public BindingMapping flatMap(Function> mapper, Supplier nullAlternative) { + public BindingMapping flatMap(Function> mapper, Supplier nullAlternative) { return new FlatMappedBinding<>(map(mapper), nullAlternative); } @@ -82,7 +82,7 @@ public abstract class BindingMapping extends ObjectBinding { } @Override - public BindingMapping map(Function mapper) { + public BindingMapping map(Function mapper) { return new MappedBinding<>(predecessor, mapper); } @@ -94,9 +94,9 @@ public abstract class BindingMapping extends ObjectBinding { private static class MappedBinding extends BindingMapping { - private final Function mapper; + private final Function mapper; - public MappedBinding(ObservableValue predecessor, Function mapper) { + public MappedBinding(ObservableValue predecessor, Function mapper) { super(predecessor); this.mapper = mapper; } @@ -107,12 +107,12 @@ public abstract class BindingMapping extends ObjectBinding { } } - private static class FlatMappedBinding, U> extends BindingMapping { + private static class FlatMappedBinding, U> extends BindingMapping { - private final Supplier nullAlternative; + private final Supplier nullAlternative; private T lastObservable = null; - public FlatMappedBinding(ObservableValue predecessor, Supplier nullAlternative) { + public FlatMappedBinding(ObservableValue predecessor, Supplier nullAlternative) { super(predecessor); this.nullAlternative = nullAlternative; } @@ -148,11 +148,11 @@ public abstract class BindingMapping extends ObjectBinding { private T prev; private U value; - private final Function> mapper; + private final Function> mapper; private T computingPrev; private boolean computing = false; - public AsyncMappedBinding(ObservableValue predecessor, Function> mapper, U initial) { + public AsyncMappedBinding(ObservableValue predecessor, Function> mapper, U initial) { super(predecessor); this.value = initial; this.mapper = mapper; @@ -168,7 +168,7 @@ public abstract class BindingMapping extends ObjectBinding { computingPrev = currentPrev; } - CompletableFuture task; + CompletableFuture task; try { task = requireNonNull(mapper.apply(currentPrev)); } catch (Throwable e) { diff --git a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java index 88b4f3976..9038ee26b 100644 --- a/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java +++ b/HMCLCore/src/main/java/org/jackhuang/hmcl/util/platform/OperatingSystem.java @@ -256,6 +256,7 @@ public enum OperatingSystem { return Optional.empty(); } + @SuppressWarnings("removal") public static void forceGC() { System.gc(); try {