Непредсказуемая потребность в Platform.runLater - PullRequest
0 голосов
/ 05 июля 2019

В приложении JavaFX у меня есть TabPane с дюжиной вкладок. Основываясь на выборе пользовательского элемента в ListView, полный набор данных для этого выбранного элемента извлекается из базы данных, и на каждой вкладке будет отображаться определенный тип информации. Чаще всего тип информации на вкладке состоит из строк, целых чисел и т. Д., Но на нескольких вкладках также показано развитие числовых данных с течением времени в разных диаграммах. Для повышения производительности я создал для каждой вкладки отдельную задачу / тему. Это породило десятки «Не в исключениях потоков приложений FX», как я ожидал. Поскольку updateProgress недостаточно для обновления пользовательского интерфейса каждой вкладки, я начал заключать код, который обновляет пользовательский интерфейс вкладки и выдает исключение с помощью Platform.runLater. Как только весь код пользовательского интерфейса был упакован, все выглядело хорошо, и приятно то, что каждый Platform.runLater просто покрывал несколько строк кода. О праве придерживаться концепции запуска только коротких задач в Platform.runLater.

Если я запускаю приложение с теми же данными теста, оно работает в 75% случаев, которые можно воспроизвести. Но время от времени код, который работал во всех этих предыдущих программах, работает нормально, выдает исключение «Не в потоке приложения FX». При проверке исходного кода, вызывающего код, правильно, что этот код должен был быть включен в Platform.runLater с самого начала.

Мой вопрос: почему код иногда выдает исключение, а иногда нет, используя одни и те же тестовые данные? Я ожидаю, что исключение выдается всегда. Это немного непредсказуемо.

...