diff --git a/src/main/java/forge/FThreads.java b/src/main/java/forge/FThreads.java index aed693b9c15..1bc9bcd3cd8 100644 --- a/src/main/java/forge/FThreads.java +++ b/src/main/java/forge/FThreads.java @@ -9,7 +9,6 @@ import java.util.concurrent.TimeUnit; import javax.swing.SwingUtilities; -import forge.control.input.InputQueue; import forge.control.input.InputSynchronized; /** @@ -115,32 +114,6 @@ public class FThreads { } } - public static void invokeInNewThread(final Runnable proc, boolean lockUI) { - Runnable toRun = proc; - final InputQueue iq = Singletons.getControl().getMatch().getInput(); - //final GameState game = Singletons.getControl().getMatch().getCurrentGame(); - //final InputQueue iq = game.getMatch().getInput(); - if( lockUI ) { - -// StackTraceElement[] trace = Thread.currentThread().getStackTrace(); -// System.out.printf("%s > Invoke in new thread during %s called from %s%n", FThreads.isEDT() ? "EDT" : "TRD", game.getPhaseHandler().getPhase(), trace[2].toString()); -// if( trace[2].toString().contains("InputBase.stop")) -// for(StackTraceElement se : trace) { -// System.out.println(se.toString()); -// } - - iq.lock(); - toRun = new Runnable() { - @Override - public void run() { - proc.run(); - iq.unlock(); - } - }; - } - invokeInNewThread(toRun); - } - public static void setInputAndWait(InputSynchronized input) { Singletons.getControl().getMatch().getInput().setInput(input); input.awaitLatchRelease(); diff --git a/src/main/java/forge/control/input/InputBase.java b/src/main/java/forge/control/input/InputBase.java index 7e9b81d66f2..28cb7a0577f 100644 --- a/src/main/java/forge/control/input/InputBase.java +++ b/src/main/java/forge/control/input/InputBase.java @@ -65,9 +65,7 @@ public abstract class InputBase implements java.io.Serializable, Input { } protected void afterStop() { } - - - + protected void passPriority() { final Runnable pass = new Runnable() { @Override public void run() { @@ -75,7 +73,7 @@ public abstract class InputBase implements java.io.Serializable, Input { } }; if( FThreads.isEDT() ) - FThreads.invokeInNewThread(pass, true); + player.getGame().getMatch().getInput().LockAndInvokeGameAction(pass); else pass.run(); } diff --git a/src/main/java/forge/control/input/InputCleanup.java b/src/main/java/forge/control/input/InputCleanup.java index c1d65505b4e..07deba3c7c7 100644 --- a/src/main/java/forge/control/input/InputCleanup.java +++ b/src/main/java/forge/control/input/InputCleanup.java @@ -18,7 +18,6 @@ package forge.control.input; import forge.Card; -import forge.FThreads; import forge.Singletons; import forge.game.GameState; import forge.game.player.Player; @@ -78,11 +77,11 @@ public class InputCleanup extends InputBase { if (!zone.is(ZoneType.Hand, Singletons.getControl().getPlayer())) return; - FThreads.invokeInNewThread(new Runnable() { + game.getMatch().getInput().LockAndInvokeGameAction(new Runnable() { @Override public void run() { card.getController().discard(card, null); } - }, true); + }); } } diff --git a/src/main/java/forge/control/input/InputPassPriority.java b/src/main/java/forge/control/input/InputPassPriority.java index 84996736b1c..c0fa7ac7b2e 100644 --- a/src/main/java/forge/control/input/InputPassPriority.java +++ b/src/main/java/forge/control/input/InputPassPriority.java @@ -18,7 +18,6 @@ package forge.control.input; import forge.Card; -import forge.FThreads; import forge.card.spellability.SpellAbility; import forge.game.phase.PhaseHandler; import forge.game.player.HumanPlay; @@ -90,7 +89,7 @@ public class InputPassPriority extends InputBase { } }; - FThreads.invokeInNewThread(execAbility, true); + player.getGame().getMatch().getInput().LockAndInvokeGameAction(execAbility); } else { SDisplayUtil.remind(VMessage.SINGLETON_INSTANCE); diff --git a/src/main/java/forge/control/input/InputPayManaBase.java b/src/main/java/forge/control/input/InputPayManaBase.java index 5c1600d220c..3dde1e84e03 100644 --- a/src/main/java/forge/control/input/InputPayManaBase.java +++ b/src/main/java/forge/control/input/InputPayManaBase.java @@ -7,7 +7,6 @@ import org.apache.commons.lang3.StringUtils; import forge.Card; import forge.CardUtil; -import forge.FThreads; import forge.card.ColorSet; import forge.card.MagicColor; import forge.card.ability.ApiType; @@ -198,7 +197,7 @@ public abstract class InputPayManaBase extends InputSyncronizedBase implements I onManaAbilityPlayed(chosen); } }; - FThreads.invokeInNewThread(proc, true); + game.getMatch().getInput().LockAndInvokeGameAction(proc); // EDT that removes lockUI from input stack will call our showMessage() method } diff --git a/src/main/java/forge/control/input/InputQueue.java b/src/main/java/forge/control/input/InputQueue.java index fcb1f67d36e..b6f64a71fe9 100644 --- a/src/main/java/forge/control/input/InputQueue.java +++ b/src/main/java/forge/control/input/InputQueue.java @@ -20,6 +20,7 @@ package forge.control.input; import java.util.concurrent.BlockingDeque; import java.util.concurrent.LinkedBlockingDeque; +import forge.FThreads; import forge.game.GameAge; import forge.game.GameState; import forge.game.phase.PhaseHandler; @@ -202,4 +203,28 @@ public class InputQueue extends MyObservable implements java.io.Serializable { return inputStack.toString(); } + public void LockAndInvokeGameAction(final Runnable proc) { + + //final GameState game = Singletons.getControl().getMatch().getCurrentGame(); + //final InputQueue iq = game.getMatch().getInput(); + + +// StackTraceElement[] trace = Thread.currentThread().getStackTrace(); +// System.out.printf("%s > Invoke in new thread during %s called from %s%n", FThreads.isEDT() ? "EDT" : "TRD", game.getPhaseHandler().getPhase(), trace[2].toString()); +// if( trace[2].toString().contains("InputBase.stop")) +// for(StackTraceElement se : trace) { +// System.out.println(se.toString()); +// } + + this.lock(); + Runnable toRun = new Runnable() { + @Override + public void run() { + proc.run(); + InputQueue.this.unlock(); + } + }; + FThreads.invokeInNewThread(toRun); + } + } // InputControl diff --git a/src/main/java/forge/game/ai/AiInputCommon.java b/src/main/java/forge/game/ai/AiInputCommon.java index ca32bbbbf65..28f12dd40b2 100644 --- a/src/main/java/forge/game/ai/AiInputCommon.java +++ b/src/main/java/forge/game/ai/AiInputCommon.java @@ -17,7 +17,6 @@ */ package forge.game.ai; -import forge.FThreads; import forge.control.input.InputBase; /** @@ -63,7 +62,7 @@ public class AiInputCommon extends InputBase implements AiInput { * \"Detailed Error Trace\" to the Forge forum."); */ - FThreads.invokeInNewThread(aiActions, true); + computer.getGame().getMatch().getInput().LockAndInvokeGameAction(aiActions); } // getMessage(); diff --git a/src/main/java/forge/game/phase/PhaseHandler.java b/src/main/java/forge/game/phase/PhaseHandler.java index b5757d6cfb4..1b31bbbb9dc 100644 --- a/src/main/java/forge/game/phase/PhaseHandler.java +++ b/src/main/java/forge/game/phase/PhaseHandler.java @@ -751,7 +751,7 @@ public class PhaseHandler extends MyObservable implements java.io.Serializable { }; if ( FThreads.isEDT() ) - FThreads.invokeInNewThread(proc, true); + game.getMatch().getInput().LockAndInvokeGameAction(proc); else proc.run(); } diff --git a/src/main/java/forge/quest/QuestEventChallenge.java b/src/main/java/forge/quest/QuestEventChallenge.java index 7213a2d777a..1551ee17165 100644 --- a/src/main/java/forge/quest/QuestEventChallenge.java +++ b/src/main/java/forge/quest/QuestEventChallenge.java @@ -58,7 +58,7 @@ public class QuestEventChallenge extends QuestEvent { private boolean repeatable = false; private boolean useBazaar = true; - private Boolean forceAnte = false; + private Boolean forceAnte = null; /** The wins reqd. */ private int winsReqd = 20;