Ответ 1
Как говорит puce, вы должны использовать Task
или Service
для вещей, которые вам нужно делать в фоновом режиме. И Platform.runLater
делать что-то в потоке приложения JavaFX из фонового потока.
Вы должны синхронизировать их, и один из способов сделать это - использовать класс CountDownLatch
.
Вот пример:
Service<Void> service = new Service<Void>() {
@Override
protected Task<Void> createTask() {
return new Task<Void>() {
@Override
protected Void call() throws Exception {
//Background work
final CountDownLatch latch = new CountDownLatch(1);
Platform.runLater(new Runnable() {
@Override
public void run() {
try{
//FX Stuff done here
}finally{
latch.countDown();
}
}
});
latch.await();
//Keep with the background work
return null;
}
};
}
};
service.start();