Это основная проблема:
Caused by: java.lang.NoSuchMethodException: de.falschername.view.GUIFalscherName.<init>()
То есть он не может найти конструктор без аргументов в классе GUIFalscherName
. Этого следует ожидать, поскольку у вас есть только один конструктор, и он:
public GUIFalscherName(String[] args) {
GUIFalscherName.launch(args);
}
, который ожидает один аргумент. Необходимость конструктора без аргументов задокументирована в Application
:
Подкласс Application
должен быть объявлен как publi c, а должен иметь общедоступный c конструктор без аргументов [выделение добавлено] .
Ваше размещение GUIFalscherName.launch(...)
также неверно. Когда вы запускаете приложение JavaFX через launch
, среда выполнения JavaFX создаст для вас экземпляр класса вашего приложения (используя отражение). Поскольку вы вызываете launch
в конструкторе, это означает, что вы создаете экземпляр, который вызывает создание другого экземпляра, в то время как исходный экземпляр просто остается для сборки мусора. Если вы хотите запустить JavaFX из отдельного основного класса, класса, который не наследуется от Application
, вам необходимо использовать Application#launch(Class,String...)
:
Запустить автономный применение. Этот метод обычно вызывается из основного метода. Его нельзя вызывать более одного раза, иначе будет сгенерировано исключение.
Метод запуска не возвращается до тех пор, пока не будет завершено приложение, либо через вызов Platform.exit()
, либо все приложения windows имеют был закрыт. Класс, указанный в аргументе appClass
, должен быть подклассом c publi Application
с конструктором без аргументов publi c в пакете, равном exported
(или open
) как минимум до javafx.graphics
модуль, или RuntimeException
будет брошен.
Примечание: Часть, связанная с экспортированными / открытыми пакетами, связана с модулями, которые были добавлены в Java 9. Если вы не разрабатываете в Java 9+ или иным образом без использования модулей, эта часть не относится к вам.
Например:
import javafx.application.Application;
public class FalscherName {
public static void main(String[] args) {
Application.launch(GUIFalscherName.class, args);
}
}
И вам нужно удалите конструктор, который вы определили в GUIFalscherName
.
Если вам нужен доступ к аргументам командной строки, используйте Application#getParameters()
.