У меня проблема при работе с JavaFX и Threads. В принципе у меня есть два варианта. Работа с Tasks или Perform.runLater. Насколько я понимаю, Perform.runLater следует использовать для простых/коротких задач, а Task для более длинных. Однако я не могу использовать ни один из них. Когда я вызываю Thread, он должен открыть диалог "captcha" в середине задачи. При использовании Task он игнорирует мой запрос, чтобы показать новый диалог... Он не позволяет мне создавать новый этап. С другой стороны, когда я использую Platform.runLater, он позволяет мне показывать диалог, однако окно программы зависает, пока не появится всплывающее диалоговое окно. Мне нужно какое-то решение для этого. Если кто-то знает, как справиться с этим или имел какой-то подобный опыт, и нашел решение, которое я с нетерпением жду услышать от вас!
JavaFX работает с потоками и графическим интерфейсом
Ответ 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();
Ответ 2
Используйте Worker (Task, Service) из потока приложений JavaFX, если вы хотите что-то сделать в фоновом режиме.
http://docs.oracle.com/javafx/2/api/javafx/concurrent/package-summary.html
Используйте Platform.runLater из фонового потока, если вы хотите что-то сделать в потоке приложения JavaFX.