I’d recommend wrapping the code within a FutureTask
object. FutureTask
is a construct useful (among other things) for executing a portion of code on one thread (usually a worker, in your case the event queue) and safely retrieving it on another. FutureTask#get
will block until FutureTask#run
has been invoked, therefore your password prompt could look like this:
final FutureTask query = new FutureTask(new Callable() {
@Override
public Object call() throws Exception {
return queryPassword();
}
});
Platform.runLater(query);
System.out.println(query.get());
As FutureTask
implements Runnable, you can pass it directly to Platform#runLater(...)
. queryPassword()
will be inokved on the event queue, and the subsequent call to get block until that method completes. Of course, you will want to invoke this code in a loop until the password actually matches.