Ваш JavaFXSkel
класс должен быть public
, как указано в документации Application
:
Подкласс Application
должен быть объявлен открытым и должен иметь открытый конструктор без аргументов.
Среда выполнения JavaFX создает экземпляр вашего подкласса Application
, используя отражение. Это делается с помощью открытого конструктора класса no-arg. Однако ваш класс JavaFXSkel
явно не объявляет никаких конструкторов, что означает, что он имеет неявный конструктор по умолчанию. Конструктор по умолчанию имеет тот же модификатор доступа, что и включающий класс, который является доступом к пакету по умолчанию в вашем случае. Это упоминается в §8.8.9 Спецификации языка Java 1 :
Если класс не содержит объявлений конструктора, тогда конструктор по умолчанию объявляется неявно. Форма конструктора по умолчанию для класса верхнего уровня, класса-члена или локального класса выглядит следующим образом:
Конструктор по умолчанию имеет тот же модификатор доступа, что и класс, если только в классе нет модификатора доступа, и в этом случае конструктор по умолчанию имеет доступ к пакету ( §6.6 ).
Конструктор по умолчанию не имеет формальных параметров, за исключением не внутреннего класса private
, в котором конструктор по умолчанию неявно объявляет один формальный параметр, представляющий непосредственно включающий экземпляр класса ( §8.8. 1 , §15.9.2 , §15.9.3 ).
Что это означает, что ваш JavaFXSkel
не имеет public no-arg конструктора, то есть NoSuchMethodException
.
1. Не ожидайте, что новичок прочитал много, если таковые вообще имеются, JLS; Я просто предоставляю это как официальную ссылку.