Жизненный цикл приложения JavaFX контролируется классом Application
. Метод stati c Application.launch(...)
запускает приложение; это достигается путем создания экземпляра класса Application
(по умолчанию класс, из которого вызывается launch()
), вызывающего конструктор без аргументов . Поскольку ваш одноэлементный подход делает конструктор без аргументов закрытым, процесс запуска больше не может создавать экземпляр вашего Application
класса, и вы получаете показанное исключение.
Однако даже без этой проблемы создание приложения класс синглтон не достиг бы того, что вы хотите Используемый здесь шаблон синглтона просто гарантирует, что только один экземпляр класса может существовать в любой Java Виртуальной машине . Если пользователь запускает приложение во второй раз, он создает вторую JVM, которая может иметь собственный экземпляр вашего синглтона.
Чтобы гарантировать, что одновременно может работать только одно приложение, вам необходим механизм блокировки запуска приложений на уровне ОС. Один из подходов заключается в том, чтобы начать прослушивание указанного порта c при запуске и закрыть это соединение при завершении работы. Поскольку только одно приложение может прослушивать данный порт, это дает желаемый эффект. См., Например, JavaFX Single Instance Application .