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;
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;
private void scanForWindows() {
while (!closed.get()) {
- var currentlyOpenWindows = stream(Window.getWindows()).filter(Component::isVisible).toList();
+ var currentlyOpenWindows = new ArrayList<Window>();
+ 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) {
}
windows.put(newWindow.getName(), newWindow);
});
- Thread.yield();
synchronized (this) {
notifyAll();
}