- java.lang.Object
-
- org.testfx.util.WaitForAsyncUtils
-
public final class WaitForAsyncUtils extends Object
Provides static methods for handling execution on different threads. The "Test Thread" is usually running on the main thread, while the GUI runs on the "FX Application Thread". Additionally, tasks may also be started on different asynchronous threads.General Convention (Method Names)
asyncmethods without a suffix refer to some unknown thread in a thread pool.- Methods ending with the suffix
Fxrefer to the "FX application thread".
Exception Handling
As exceptions on different threads are thrown the caller is usually not aware of these exceptions. Exceptions returned directly from this framework are wrapped in
RuntimeExceptions.There are two ways this class notifies the user of exceptions:
- The returned
Future. - The internal exception stack.
Usually exceptions are forwarded to the
Futurereturned by the methods of this class. When the calling thread callsFuture.get()on theFutureany exceptions encountered during execution will be thrown. AllwaitFormethods acquire the value of theFutureand accordingly throw the same exceptions.The internal exception stack stores all unhandled exceptions thrown during direct calls to the
asyncmethods. As this class can not guarantee that exceptions in these methods are handled properly, it will internally store these exceptions. The exceptions will be in the stack, until they are handled somewhere in the application. If the fieldautoCheckExceptionis set to true, any subsequent calls to one of theasyncmethods will throw one of those exceptions.
-
-
Field Summary
Fields Modifier and Type Field Description static booleanautoCheckExceptionIf true any call to anasyncmethod will check for the occurrence of unhandled exceptions.static booleancheckAllExceptionsIf true any call to anasyncmethod will check for the occurrence of unhandled exceptions in anyThread.static booleanprintExceptionIf true any exceptions encountered during execution of theasyncmethods will be printed to stderr.
-
Constructor Summary
Constructors Constructor Description WaitForAsyncUtils()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description static Future<Void>async(Runnable runnable)static Future<Void>async(Runnable runnable, boolean throwExceptions)static <T> Future<T>async(Callable<T> callable)static <T> Future<T>async(Callable<T> callable, boolean throwExceptions)static Future<Void>asyncFx(Runnable runnable)static <T> Future<T>asyncFx(Callable<T> callable)static voidcheckException()Checks if an exception in an async task occurred that has not been checked currently.static voidclearExceptions()Clears all unhandled exceptions.static voidsleep(long duration, TimeUnit timeUnit)Sleeps the current thread for the given duration.static voidwaitFor(long timeout, TimeUnit timeUnit, Callable<Boolean> condition)Waits for givenCallableto return true otherwise times out with aTimeoutException.static <T> TwaitFor(long timeout, TimeUnit timeUnit, Future<T> future)static voidwaitFor(long timeout, TimeUnit timeUnit, ObservableBooleanValue booleanValue)Waits for givenObservableBooleanValueto return true otherwise times out with aTimeoutException.static <T> TwaitFor(Future<T> future)Waits for the givenFutureto be set and then returns the future result of typeT.static voidwaitForAsync(long millis, Runnable runnable)Runs the givenRunnableon a newThreadand waitsmillismilliseconds for it to finish, otherwise times out with aTimeoutException.static <T> TwaitForAsync(long millis, Callable<T> callable)static voidwaitForAsyncFx(long millis, Runnable runnable)Runs the givenRunnableon the JavaFX Application Thread at some unspecified time in the future and waitsmillismilliseconds for it to finish, otherwise times out with aTimeoutException.static <T> TwaitForAsyncFx(long millis, Callable<T> callable)Calls the givenCallableon the JavaFX Application Thread at some unspecified time in the future and waitsmillismilliseconds for it to finish.static voidwaitForFxEvents()Waits for the event queue of the "JavaFX Application Thread" to be completed, as well as any new events triggered in it.static voidwaitForFxEvents(int attemptsCount)Waits up toattemptsCountattempts for the event queue of the "JavaFX Application Thread" to be completed, as well as any new events triggered on it.
-
-
-
Field Detail
-
printException
public static boolean printException
If true any exceptions encountered during execution of theasyncmethods will be printed to stderr. The exceptions will be printed at the time they occur (not when fetched).
-
autoCheckException
public static boolean autoCheckException
If true any call to anasyncmethod will check for the occurrence of unhandled exceptions.
-
checkAllExceptions
public static boolean checkAllExceptions
If true any call to anasyncmethod will check for the occurrence of unhandled exceptions in anyThread.
-
-
Method Detail
-
async
public static Future<Void> async(Runnable runnable)
Runs the givenRunnableon a newThreadand returns aFuturethat is set on finish or error.You need to evaluate the returned
Futurevia (Future.get()) for exceptions or call thecheckException()method to handle exceptions after the task has finished.- Parameters:
runnable- theRunnableto run- Returns:
- the
Futureresult of theRunnable
-
async
public static Future<Void> async(Runnable runnable, boolean throwExceptions)
Runs the givenRunnableon a newThreadand returns aFuturethat is set on finish or error.You need to evaluate the returned
Futurevia (Future.get()) for exceptions or call thecheckException()method to handle exceptions after the task has finished.- Parameters:
runnable- theRunnableto runthrowExceptions- whether or not to throw exceptions on the executing thread- Returns:
- the
Futureresult of the runnable
-
async
public static <T> Future<T> async(Callable<T> callable)
Calls the givenCallableon a newThreadand returns aFuturethat is set on finish or error.You need to evaluate the returned
Futurevia (Future.get()) for exceptions or call thecheckException()method to handle exceptions after the task has finished.- Type Parameters:
T- the return type of theCallable- Parameters:
callable- theCallableto run- Returns:
- the
Futureresult of theCallable
-
async
public static <T> Future<T> async(Callable<T> callable, boolean throwExceptions)
Calls the givenCallableon a newThreadand returns aFuturethat is set on finish or error.You need to evaluate the returned
Futurevia (Future.get()) for exceptions or call thecheckException()method to handle exceptions after the task has finished.- Type Parameters:
T- the return type of theCallable- Parameters:
callable- theCallableto runthrowExceptions- whether or not to throw exceptions on the executing thread- Returns:
- the
Futureresult of theCallable
-
asyncFx
public static Future<Void> asyncFx(Runnable runnable)
Runs the givenRunnableon the JavaFX Application Thread at some unspecified time in the future and returns aFuturethat is set on finish or error.You need to evaluate the returned
Futurevia (Future.get()) for exceptions or call thecheckException()method to handle exceptions after the task has finished.- Parameters:
runnable- theRunnableto run- Returns:
- the
Futureresult of theRunnable
-
asyncFx
public static <T> Future<T> asyncFx(Callable<T> callable)
Calls the givenCallableon the JavaFX Application Thread at some unspecified time in the future and returns aFuturethat is set on finish or error.You need to evaluate the returned
Futurevia (Future.get()) for exceptions or call thecheckException()method to handle exceptions after the task has finished.- Type Parameters:
T- theCallabletype- Parameters:
callable- theCallable- Returns:
- the
Futureresult of theCallable
-
waitFor
public static <T> T waitFor(Future<T> future)
Waits for the givenFutureto be set and then returns the future result of typeT.- Type Parameters:
T- the type of theFuture- Parameters:
future- theFutureto wait for to be set- Returns:
- the result of the
Future
-
waitFor
public static <T> T waitFor(long timeout, TimeUnit timeUnit, Future<T> future) throws TimeoutException- Type Parameters:
T- the type of theFuture- Parameters:
timeout- the timeout to wait fortimeUnit- the time unittimeoutis infuture- theFutureto wait for to be set- Returns:
- the result of the
Future - Throws:
TimeoutException- if the wait timed out
-
waitFor
public static void waitFor(long timeout, TimeUnit timeUnit, Callable<Boolean> condition) throws TimeoutExceptionWaits for givenCallableto return true otherwise times out with aTimeoutException. The condition will be evaluated at least once. This method will wait for the last condition to finish after a timeout.- Parameters:
timeout- the timeout to wait fortimeUnit- the time unittimeoutis incondition- the condition to wait for to be true- Throws:
TimeoutException- if the wait timed out
-
waitFor
public static void waitFor(long timeout, TimeUnit timeUnit, ObservableBooleanValue booleanValue) throws TimeoutExceptionWaits for givenObservableBooleanValueto return true otherwise times out with aTimeoutException.- Parameters:
timeout- the timeout to wait fortimeUnit- the time unittimeoutis inbooleanValue- the observable- Throws:
TimeoutException- if the wait timed out
-
waitForFxEvents
public static void waitForFxEvents()
Waits for the event queue of the "JavaFX Application Thread" to be completed, as well as any new events triggered in it.
-
waitForFxEvents
public static void waitForFxEvents(int attemptsCount)
Waits up toattemptsCountattempts for the event queue of the "JavaFX Application Thread" to be completed, as well as any new events triggered on it.- Parameters:
attemptsCount- the number of attempts to try
-
sleep
public static void sleep(long duration, TimeUnit timeUnit)Sleeps the current thread for the given duration.- Parameters:
duration- the duration to sleeptimeUnit- the time unitdurationis in
-
waitForAsync
public static void waitForAsync(long millis, Runnable runnable)Runs the givenRunnableon a newThreadand waitsmillismilliseconds for it to finish, otherwise times out with aTimeoutException.- Parameters:
millis- number of milliseconds to waitrunnable- theRunnableto run
-
waitForAsync
public static <T> T waitForAsync(long millis, Callable<T> callable)Calls the givenCallableon a newThreadand waitsmillismilliseconds for it to finish. If finished, returns the future result of typeT, otherwise times out with aTimeoutException.- Type Parameters:
T- the type returned by theCallable- Parameters:
millis- number of milliseconds to waitcallable- theCallableto call- Returns:
- the result returned by the
Callable
-
waitForAsyncFx
public static void waitForAsyncFx(long millis, Runnable runnable)Runs the givenRunnableon the JavaFX Application Thread at some unspecified time in the future and waitsmillismilliseconds for it to finish, otherwise times out with aTimeoutException.- Parameters:
millis- number of milliseconds to waitrunnable- theRunnableto run
-
waitForAsyncFx
public static <T> T waitForAsyncFx(long millis, Callable<T> callable)Calls the givenCallableon the JavaFX Application Thread at some unspecified time in the future and waitsmillismilliseconds for it to finish. If finished, returnsTotherwise times out with aTimeoutException.- Type Parameters:
T- the type returned by theCallable- Parameters:
millis- number of milliseconds to waitcallable- theCallableto call- Returns:
- the result returned by the
Callable
-
checkException
public static void checkException() throws ThrowableChecks if an exception in an async task occurred that has not been checked currently. If so, the first exception will be removed and thrown by this method.- Throws:
Throwable- if an exception has occurred in an async task
-
clearExceptions
public static void clearExceptions()
Clears all unhandled exceptions.
-
-