src/Pure/System/jfx_thread.scala
author wenzelm
Tue, 08 Jan 2013 21:16:51 +0100
changeset 50777 20126dd9772c
parent 49066 1067a639d42a
permissions -rw-r--r--
include timing properties in log; general Properties.parse operations; tuned signature;

/*  Title:      Pure/System/jfx_thread.scala
    Module:     PIDE
    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
    }
  }
}