JavaFX, как и многие другие GUI-библиотеки, однопоточна. При создании окна создаётся
Поток Обработки Событий, внутри которого будет работать цикл событий и обработчики событий. Вы не должны пытаться из главного потока или любого другого потока взаимодействовать с элементами графического интерфейса - это приведёт к сбою. Вы не должны внутри обработчиков событий запускать потоки - это приведёт к сбою. Вы не должны останавливать поток - это приведёт к сбою. Поэтому необходимо использовать предлагаемые библиотекой механизмы запуска фоновых задач и взаимодействия с ними -
Platform.runLater(),
Service,
Task и т.п. Или можно придумывать собственные велосипеды, типа используемого в коде из вопроса, но тогда лучше сначала прочитать "Java Concurrency in Practice" Брайана Гетца и разобраться с
паттернами.