From 284c53489b89a6e39027aeab27c258c8926f77f0 Mon Sep 17 00:00:00 2001 From: Starla Insigna Date: Mon, 23 Feb 2009 09:20:19 -0500 Subject: Engine: Added Event Thread cancellation --- src/com/fourisland/fourpuzzle/Display.java | 61 +++++++++++++++++------------- 1 file changed, 34 insertions(+), 27 deletions(-) (limited to 'src/com/fourisland/fourpuzzle/Display.java') diff --git a/src/com/fourisland/fourpuzzle/Display.java b/src/com/fourisland/fourpuzzle/Display.java index a8c9a37..c8d17d9 100755 --- a/src/com/fourisland/fourpuzzle/Display.java +++ b/src/com/fourisland/fourpuzzle/Display.java @@ -198,47 +198,54 @@ public class Display { transitionRunning = true; transitionWait = new CountDownLatch(1); - transitionWait.await(); - Display.transition = null; + try { + transitionWait.await(); + } catch (InterruptedException ex) { + throw ex; + } finally { + Display.transition = null; - if (!startedTransition) - { - transitionRunning = false; + if (!startedTransition) + { + transitionRunning = false; + } } } private static Executor transitioner = Executors.newSingleThreadExecutor(); - public static void transition(final OutTransition out, final GameState gameState, final InTransition in, boolean thread) + public static void transition(final OutTransition out, final GameState gameState, final InTransition in, boolean thread) throws InterruptedException { - Runnable transitionCall = new Runnable() { - public void run() - { - try { - Display.transition(out); - Game.setGameState(gameState); - Display.transition(in); - } catch (InterruptedException ex) { - Thread.currentThread().interrupt(); - } catch (RuntimeException ex) - { - PuzzleApplication.INSTANCE.reportError(ex); - } catch (Error ex) - { - PuzzleApplication.INSTANCE.reportError(ex); - } - } - }; - if (thread) { + Runnable transitionCall = new Runnable() { + public void run() + { + try { + Display.transition(out); + Game.setGameState(gameState); + Display.transition(in); + } catch (InterruptedException ex) { + return; + } catch (RuntimeException ex) + { + PuzzleApplication.INSTANCE.reportError(ex); + } catch (Error ex) + { + PuzzleApplication.INSTANCE.reportError(ex); + } + } + }; + transitioner.execute(transitionCall); } else { - transitionCall.run(); + Display.transition(out); + Game.setGameState(gameState); + Display.transition(in); } } - public static void transition(TransitionPair trans, GameState gameState, boolean thread) + public static void transition(TransitionPair trans, GameState gameState, boolean thread) throws InterruptedException { transition(trans.getOutTransition(), gameState, trans.getInTransition(), thread); } -- cgit 1.4.1