src/Pure/GUI/jfx_thread.scala
author blanchet
Tue, 24 Sep 2013 16:21:04 +0200
changeset 53824 b81cea96a85e
parent 53783 f5e9d182f645
child 53853 e8430d668f44
permissions -rw-r--r--
updated certificates

/*  Title:      Pure/GUI/jfx_thread.scala
    Author:     Makarius

Evaluation within the Java FX application thread.
*/

package isabelle

import javafx.application.{Platform => JFX_Platform}


object JFX_Thread
{
  /* checks */

  def assert() = Predef.assert(JFX_Platform.isFxApplicationThread())
  def require() = Predef.require(JFX_Platform.isFxApplicationThread())


  /* asynchronous context switch */

  def later(body: => Unit)
  {
    if (JFX_Platform.isFxApplicationThread()) body
    else JFX_Platform.runLater(new Runnable { def run = body })
  }

  def future[A](body: => A): Future[A] =
  {
    if (JFX_Platform.isFxApplicationThread()) Future.value(body)
    else {
      val promise = Future.promise[A]
      later { promise.fulfill_result(Exn.capture(body)) }
      promise
    }
  }
}