Прямое объяснение того, что происходит
Документация для метода применения start прямо говорится, что происходит:
Метод запуска вызывается после того, как метод инициализации вернулся, и после того, как система готова для запуска приложения.
Итак, если вы запускаете бесконечный цикл в методе init, который никогда не возвращается, ваше приложение никогда не запустится.
Дополнительная документация по жизненному циклу приложения приведена в javaadoc Application.
Некоторые отступлений, спекуляции и, возможно, связано информация
Следующая информация может или не может иметь отношение к вашей проблеме под рукой.
Я считаю, что идея метода init заключается в том, что вы можете поместить логику в метод init, который может выполняться, когда сама система JavaFX инициализируется. Инициализация системы JavaFX занимает некоторое время, хотя в современной системе обработки я бы не ожидал, что это будет очень длительное время (например, менее секунды).
Большинство приложений JavaFX, которые я видел, мало используют метод init.
Если ваша инициализация длительная и вы хотите, чтобы приложение запускалось быстро даже до завершения инициализации, для его обработки вам понадобится явная логика.
Например, создайте JavaFX Task в методе init, который запускается в его собственном потоке. Выполните инициализацию там. В вашем методе начала отображается пользовательский интерфейс с ограниченной функциональностью. Как только ваша инициализация будет полностью завершена (что может быть известно слушателю о состоянии вашей задачи инициализации), включите полностью функциональный пользовательский интерфейс, который зависит от того, какие данные из инициализации будут полностью доступны. Хотя это не совсем то же самое (поскольку он запускает некоторую логику Task от начала, а не init), очень похожий пример этого подхода находится в этом примере, который «Displays a JavaFX splash page for an intensive startup task with progress monitoring».
JavaFX имеет концепцию Preloader, которая предоставляет встроенную инфраструктуру для обработки длительной инициализации, однако я не видел ее широко используемой. Сам Preloader ориентирован главным образом на Java, встроенный в веб-страницу через плагин или Java Web Start. Это не технологии, которые много используются в сочетании с JavaFX. Большинство приложений JavaFX представляют собой автономные приложения, не полагающиеся на плагины веб-страниц или веб-запуск для их выполнения). Вы можете использовать инфраструктуру Preloader для инициализации вашего приложения (даже если оно работает в автономном режиме), но, вероятно, проще просто использовать задачу для этой цели. Для получения дополнительной информации об использовании Preloader вы можете обратиться к: How to use javaFX Preloader with stand-alone application in Eclipse? (обратите внимание, что ответ на этот вопрос не является специфичным для Eclipse, хотя вопрос есть).
Почему вы ожидаете, что приложение запустится, если задача инициализации для него никогда не заканчивается? – jewelsea
У меня возникла другая мысль о том, как она работала изначально - поэтому это предположение – Elltz