@@ -0,0 +1,509 @@
+package me.izstas.rfs.client.util;%0A%0Aimport java.util.concurrent.Executor;%0Aimport javax.swing.SwingUtilities;%0A%0A/**%0A * An executor whose %7B@link Executor#execute(Runnable)%7D method delegates to %7B@link SwingUtilities#invokeLater(Runnable)%7D.%0A */%0Apublic final class SwingExecutor implements Executor %7B%0A    public static final Executor INSTANCE = new SwingExecutor();%0A%0A    private SwingExecutor() %7B%0A    %7D%0A%0A    @Override%0A    public void execute(Runnable command) %7B%0A        SwingUtilities.invokeLater(command);%0A    %7D%0A%7D%0A

Add Executor implementation which executes tasks in Swing event thread