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