Почему я получаю java.lang.IllegalStateException «Не в streamе приложения FX» на JavaFX?

У меня есть приложение, которое имеет TableView , у которого есть подключенный слушатель, поэтому он обновляется, как только он обнаруживает изменение, но дело в том, что я получаю java.lang.IllegalStateException: Not on FX application thread; currentThread = Smack Listener Processor (0) java.lang.IllegalStateException: Not on FX application thread; currentThread = Smack Listener Processor (0) . Вот мой код:

 /** * This function resets the pagination pagecount */ public void resetPage() { try { System.out.println("RESET"); int tamRoster = this.loginManager.getRosterService().getRosterList().size(); paginationContactos.setPageCount((int)(Math.ceil(tamRoster*1.0/limit.get()))); int tamEnviados = this.loginManager.getRosterService().getEnviadasList().size(); paginationEnviadas.setPageCount((int)(Math.ceil(tamEnviados*1.0/limit.get()))); int tamRecibidas = this.loginManager.getRosterService().getRecibidasList().size(); paginationRecibidas.setPageCount((int)(Math.ceil(tamRecibidas*1.0/limit.get()))); } catch (Exception e) { e.printStackTrace(); } } public void doSomething () { this.loginManager.getRosterService().getRosterList().addListener(new ListChangeListener() { @Override public void onChanged( javafx.collections.ListChangeListener.Change c) { // TODO Auto-generated method stub resetPage(); while (c.next()) { if (c.wasPermutated()) { System.out.println("PERM"); } else if (c.wasUpdated()) { System.out.println("UPD"); } else { System.out.println("ELSE"); } } } }); } 

Хотя он вводит метод resetPage, я получаю это исключение. Почему это происходит? Как я могу это исправить? Заранее спасибо.

    Пользовательский интерфейс не может быть напрямую обновлен из streamа, отличного от приложения. Вместо этого используйте Platform.runLater() , с логикой внутри объекта Runnable. Например:

     Platform.runLater(new Runnable() { @Override public void run() { // Update UI here. } }); 

    Как выражение lambda:

     // Avoid throwing IllegalStateException by running from a non-JavaFX thread. Platform.runLater( () -> { // Update UI here. } ); 

    Код JavaFX позволяет обновлять пользовательский интерфейс из streamа приложений JavaFX. Но из приведенного выше сообщения об исключении говорится, что он не использует stream приложений FX.

    Один из способов, который вы можете исправить, – запустить stream приложения FX из метода resetPage и внести изменения в него.

    Interesting Posts

    Сериализация и десериализация json с повышением

    Inno Setup: убедитесь, что установлен .NET 4.0

    Как работает префикс плагина Maven? Почему это разрешает «поиск», но не «причал»?

    Windows 10 показывает оранжевый экран с белыми вертикальными линиями при загрузке

    SASS: создание имен имен подчеркивания фактически создает файлы css

    Доступ к домашнему сетевому принтеру, когда я использую VPN для подключения к работе

    Как удалить выделенную blob в хранилище Microsoft Azure

    Удалить значок центра синхронизации

    Генерировать hash из UIImage

    Диск застрял в моем слот-загрузке Dell Studio Hybrid. Как я могу это выяснить?

    Как выйти из утилиты командной строки PostgreSQL: psql

    Как сделать брекеты с клавиатурой Apple в Windows?

    Ffplay – как играть вместе отдельные видео и аудио файлы

    Использование сертификатов клиент / сервер для двухсторонней аутентификации SSL-сокета на Android

    Кроссфейд между двумя видео с помощью ffmpeg

    Давайте будем гением компьютера.