# HG changeset patch # User wenzelm # Date 1337874167 -7200 # Node ID 1e790c27162ded625e5fd30fc5e442246dd3f412 # Parent e4b69e10b990a0af0012f4775af487ee0838d415 more robust Swing_Thread.now: allow body to fail; diff -r e4b69e10b990 -r 1e790c27162d src/Pure/System/swing_thread.scala --- a/src/Pure/System/swing_thread.scala Thu May 24 17:25:53 2012 +0200 +++ b/src/Pure/System/swing_thread.scala Thu May 24 17:42:47 2012 +0200 @@ -24,10 +24,11 @@ def now[A](body: => A): A = { - @volatile var result: Option[A] = None - if (SwingUtilities.isEventDispatchThread()) { result = Some(body) } - else SwingUtilities.invokeAndWait(new Runnable { def run = { result = Some(body) } }) - result.get + @volatile var result: Option[Exn.Result[A]] = None + if (SwingUtilities.isEventDispatchThread()) { result = Some(Exn.capture(body)) } + else + SwingUtilities.invokeAndWait(new Runnable { def run = { result = Some(Exn.capture(body)) } }) + Exn.release(result.get) } def future[A](body: => A): Future[A] =