From: David Roden Date: Mon, 27 Jan 2025 20:38:24 +0000 (+0100) Subject: ⚡️ Synchronize window scanning X-Git-Url: https://git.pterodactylus.net/?a=commitdiff_plain;h=d60697a3e498e40dda55560df14afa061d4d6c90;p=msta.git ⚡️ Synchronize window scanning --- diff --git a/server/src/main/java/de/qsheltier/msta/Server.java b/server/src/main/java/de/qsheltier/msta/Server.java index 9cb7cb7..4ca790b 100644 --- a/server/src/main/java/de/qsheltier/msta/Server.java +++ b/server/src/main/java/de/qsheltier/msta/Server.java @@ -15,10 +15,12 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; +import java.lang.reflect.InvocationTargetException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketAddress; +import java.util.ArrayList; import java.util.HashSet; import java.util.Map; import java.util.Set; @@ -26,6 +28,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Consumer; +import javax.swing.SwingUtilities; import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.Arrays.stream; @@ -137,7 +140,13 @@ public class Server implements Closeable { private void scanForWindows() { while (!closed.get()) { - var currentlyOpenWindows = stream(Window.getWindows()).filter(Component::isVisible).toList(); + var currentlyOpenWindows = new ArrayList(); + try { + Thread.sleep(100); + SwingUtilities.invokeAndWait(() -> stream(Window.getWindows()).filter(Component::isVisible).forEach(currentlyOpenWindows::add)); + } catch (InterruptedException | InvocationTargetException e) { + /* ignore. */ + } var newWindows = currentlyOpenWindows.stream().filter(window -> !windows.containsValue(window)).toList(); newWindows.forEach(newWindow -> { synchronized (outputWriters) { @@ -145,7 +154,6 @@ public class Server implements Closeable { } windows.put(newWindow.getName(), newWindow); }); - Thread.yield(); synchronized (this) { notifyAll(); }