From ab012ed32751b262ed24156916b602bb26ab2326 Mon Sep 17 00:00:00 2001 From: Maxmtg Date: Thu, 6 Jun 2013 08:00:48 +0000 Subject: [PATCH] SLayoutIO save should not require non-edt thread --- .../java/forge/gui/framework/SLayoutIO.java | 18 +++++++++++++----- .../forge/gui/framework/SRearrangingUtil.java | 4 +--- .../forge/gui/framework/SResizingUtil.java | 4 +--- 3 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/main/java/forge/gui/framework/SLayoutIO.java b/src/main/java/forge/gui/framework/SLayoutIO.java index 9911ce63608..73580619231 100644 --- a/src/main/java/forge/gui/framework/SLayoutIO.java +++ b/src/main/java/forge/gui/framework/SLayoutIO.java @@ -10,6 +10,7 @@ import java.util.Collection; import java.util.Iterator; import java.util.List; import java.util.Map.Entry; +import java.util.concurrent.atomic.AtomicBoolean; import javax.swing.SwingUtilities; import javax.swing.border.EmptyBorder; @@ -23,6 +24,7 @@ import javax.xml.stream.events.Attribute; import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; +import forge.FThreads; import forge.Singletons; import forge.control.FControl.Screens; import forge.properties.FileLocation; @@ -60,17 +62,23 @@ public final class SLayoutIO { return SLayoutIO.getFileForState(mode).userPrefLoc; } + + private final static AtomicBoolean saveRequested = new AtomicBoolean(false); /** Publicly-accessible save method, to neatly handle exception handling. * @param f0 file to save layout to, if null, saves to filePreferred * * */ public static void saveLayout(final File f0) { - if (SwingUtilities.isEventDispatchThread()) { - throw new IllegalThreadStateException("This operation should be independent of the EDT."); - } - - save(f0); + if( saveRequested.getAndSet(true) ) return; + FThreads.delay(100, new Runnable() { + + @Override + public void run() { + save(f0); + saveRequested.set(false); + } + }); } private synchronized static void save(final File f0) { diff --git a/src/main/java/forge/gui/framework/SRearrangingUtil.java b/src/main/java/forge/gui/framework/SRearrangingUtil.java index 7f95b750478..05e483b19e8 100644 --- a/src/main/java/forge/gui/framework/SRearrangingUtil.java +++ b/src/main/java/forge/gui/framework/SRearrangingUtil.java @@ -306,9 +306,7 @@ public final class SRearrangingUtil { cellNew.refresh(); updateBorders(); - final Thread t = new Thread() { @Override - public void run() { SLayoutIO.saveLayout(null); } }; - t.start(); + SLayoutIO.saveLayout(null); } /** The gap created by displaced panels must be filled. diff --git a/src/main/java/forge/gui/framework/SResizingUtil.java b/src/main/java/forge/gui/framework/SResizingUtil.java index 2817a4f8286..bc5a2cdd14b 100644 --- a/src/main/java/forge/gui/framework/SResizingUtil.java +++ b/src/main/java/forge/gui/framework/SResizingUtil.java @@ -374,9 +374,7 @@ public final class SResizingUtil { /** */ public static void endResize() { - final Thread t = new Thread() { @Override - public void run() { SLayoutIO.saveLayout(null); } }; - t.start(); + SLayoutIO.saveLayout(null); } /** @return {@link java.awt.event.MouseListener} */