Контроллер и фабрика контроллеров - это две разные вещи:
Контроллер - это объект, который содержит методы, используемые с #methodName
значениями атрибутов и полями, в которые загрузчик вводит объекты на основе fx:id
s.
Фабрика контроллера используется для создания контроллера, если вы назначаете его ему.
controllerFactory.call(Class.forName(<fx:controller attribute value>))
используется FXMLLoader
для создания экземпляра класса контроллера, если вы назначаете Callback
перед загрузкой fxml.
Кроме того, вы используете один из методов static
load
.Таким образом, создается второй экземпляр FXMLLoader
, к которому вы не можете получить доступ и который используется для загрузки fxml.Вам нужно указать URL
как местоположение перед загрузкой fxml.
FXMLLoader loader = new FXMLLoader(new File("src/dreambot/guis/XPTracker.fxml").toURI().toURL()); // maybe replace with resource access (getClass().getResource("/dreambot/guis/XPTracker.fxml"))?
Parent root = loader.load();
Controller l = loader.getController();
Также вы не можете создать экземпляр класса Application
самостоятельно и использовать стандартный способ запуска.Application.launch
всегда создает новый экземпляр класса приложения.В этом случае создание build
метода static
будет служить той же цели, но вы также можете указать класс приложения, используя перегруженную версию launch
:
Application.launch(App.class, args);