У меня есть одна проблема. Я создаю приложение JavaFX для рабочего стола. У меня есть поток в моем приложении, который работает в фоновом режиме, предположим, что он загружает файлы из Интернета.
Я прочитал статьи о параллелизме в JavaFX. Существует специальная задача класса. Я расширил свой класс с помощью задачи. Но он может только вернуть некоторую ценность, и после этого он будет закрыт.
Но мне нужно, чтобы эта задача выполнялась в течение всего жизненного цикла приложения, и когда, скажем, файл загружен, он должен публиковать результат в потоке пользовательского интерфейса, чтобы быть более точным на контроллере, который, в свою очередь, обновляет некоторый компонент ui.
Я знаю, что у задачи есть метод updateProgress, возможно, я могу связать ее не только для получения целых чисел, но и для сложных объектов.
Или есть другой хороший подход, чтобы следовать в моем случае.
Пожалуйста, помогите с этой проблемой.Прослушать фоновый поток от UI JavaFX
3
A
ответ
2
JavaFX предоставляет вам ScheduledService, который может быть спланирован для повторяющихся работ. Javadoc говорит,
ScheduledService это служба, которая будет автоматически перезагружена сам после успешного выполнения, и при некоторых условиях будут рестарта даже в случае выхода из строя.
Очень простой пример был бы:
ScheduledService<Object> service = new ScheduledService<Object>() {
protected Task<Object> createTask() {
return new Task<Object>() {
protected Object call() {
// Connect to a Server
// Download the object
updateProgress(...);
return object; // Useful in case you want to return data, else null
}
};
}
};
service.setPeriod(Duration.seconds(10)); //Runs every 10 seconds
//bind the service progress/message properties
progressBar.progressProperty().bind(service.progressProperty());
Есть без JavaFX способов для достижения этой цели, а также, вы можете использовать:
+0
Работает как шарм, кстати – bxfvgekd
1
Самого простой способ здесь будет использовать обычную старую тему:
// create new thread at start, e.g. at the end for Application.start() method
new Thread(new Runnable() {
public void run() {
while(true) {
//load my data
// once loaded
// update UI using
Platform.runLater(new Runnable() {
public void run() {
// here goes my update on FX UI thread
}
});
// update is done let's look for more data
}
}
}).start();
Смежные вопросы
- 1. C# фоновый поток вызывает отставание в UI
- 2. JavaFX UI заблокирован, пока другой поток работает
- 3. Почему поток блокирует мою тему JavaFX UI?
- 4. UI thread блокирует фоновый поток, вызывающий объект COM
- 5. Загрузка изображения на фоновый поток
- 6. Отключить фоновый режим javafx
- 7. Dellocation ViewController, содержащий фоновый поток
- 8. Как создать фоновый поток
- 9. Фоновый поток Windows 8?
- 10. Как создать фоновый поток?
- 11. Android: Как запустить фоновый поток и поток пользовательского интерфейса одновременно?
- 12. JavaFX ProgressBar/ProgressIndicator: прослушать изменение от нескольких слайдеров
- 13. .net Наблюдаемый 'ObserveOn' фоновый поток
- 14. Фоновый рабочий заблокирован UI
- 15. JavaFX: как прослушивать события на объекте, отличном от UI
- 16. Javafx прослушать изменения управления в панели
- 17. фоновый поток с использованием Task.Run
- 18. фоновый поток в приложении asp.net
- 19. Как поддерживать постоянный фоновый поток?
- 20. Как прервать фоновый поток AsyncTaskLoader?
- 21. Загрузка CoreData в фоновый поток
- 22. Что делает фоновый поток GDI +?
- 23. Сделать фоновый поток в единстве3d
- 24. SWT фоновый поток блокирует GUI
- 25. Как убить/остановить фоновый поток?
- 26. Когда Asp.net завершает фоновый поток?
- 27. Фоновый рабочий процесс или поток?
- 28. Как использовать фоновый поток в Objective-C?
- 29. Как прослушать изменение выбора в JavaFX ListView
- 30. Как прослушать изменение размера сцены в JavaFX?
Любые особые причины для * задача запускается на протяжении всего жизненного цикла приложения * и не создавать ее, когда это необходимо? – ItachiUchiha
Ответ на вопрос @ ItachiUchiha зависит от того, запрашивается ли файл (или что-то, что делает фоновый поток) из пользовательского интерфейса (например, нажатие кнопки «загрузка»), и в этом случае вы могли бы создать задачу по требованию или полностью не зависит от действий пользовательского интерфейса. –
Нет, файлы downloadin - это просто пример, okey, я буду hones, служба проверки почты, проходящая через всю жизнь приложения – bxfvgekd