Есть несколько способов сделать это. Я предпочитаю метод 1, так как он кажется мне более простым.
Для загрузки ресурса вам необходимо знать путь. Контроллеры знают свой собственный путь, поэтому я использую их.
Например, если у меня есть иерархия java/hypnic/jerk/controllers/
с файлом MainController.java
, и я хочу загрузить файл FXML, который будет использовать этот файл Java в качестве контроллера, я добавлю его в resources/hypnic/jerk/controllers/
. Затем, когда я звоню FXMLLoader.load();
, я делаю это так:
FXMLLoader.load(MainController.class.getResource("mainScreen.fxml"));
Из того, что я понимаю и как я это вижу, это говорит загрузчику использовать путь, указанный в MainController
, и извлечь файл mainScreen.fxml
из пути туда.
Это, на мой взгляд, самый простой способ сделать это, поскольку он заставляет вас соблюдать соглашения об именах И вы знаете, где находится каждый файл FXML
для соответствующего файла контроллера.
Вы также можете использовать путь, чтобы найти его, в вашем случае ваш loginScene.fxml
находится в папке fxml/
, поэтому с Main
я бы сделал
FXMLLoader.load(getClass().getResource("../../../../fxml/loginScene.fxml"));
../
означает, перейдите на один каталог / папку. Поэтому, в зависимости от того, как элементы, которые вы вычеркнули, помните, что каждая .
является новой папкой с таким именем, вам нужно добавить ../
, пока вы не вернетесь в папку java
.
Позволяет использовать ваш пример с путем java/br/com/one/two/three/main/
. Поскольку ваш код говорит getClass().getResource("fxml/loginScene.fxml")
, вы ищете этот файл в папке resources/br/com/one/two/three/fxml/
. Путь основан на вызывающем классе Main.java
, поэтому он не может найти его, потому что путь в resources
не существует.
Так что вам нужно отойти от этих каталогов, используя ../
, пока не дойдете до него. каждый ../
представляет другой уровень вверх. Так что в этом случае, если я правильно выполнил свою математику, вам понадобится 5 ../
, чтобы найти файл fxml/loginScene.fxml
. Таким образом, конечный результат будет
FXMLLoader.load(getClass().getResource("../../../../../fxml/loginScene.fxml"));
Теперь помните, что это просто объяснение, и вам придется адаптировать его самостоятельно.
Надеюсь, это помогло.