From d60697a3e498e40dda55560df14afa061d4d6c90 Mon Sep 17 00:00:00 2001 From: David Roden Date: Mon, 27 Jan 2025 21:38:24 +0100 Subject: [PATCH] =?utf8?q?=E2=9A=A1=EF=B8=8F=20Synchronize=20window=20scan?= =?utf8?q?ning?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- server/src/main/java/de/qsheltier/msta/Server.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) 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(); } -- 2.7.4