JavaFX getResource не загружает FXML

#java #javafx

#java #javafx

Вопрос:

Я пытаюсь загрузить файл FXML в контроллер JavaFX со следующим кодом:

 loader.setLocation(BaseController.class.getResource("/baseLayout.fxml"));
baseLayout = loader.load();
  

Но вместо этого я получаю это исключение:

 java.lang.IllegalStateException: Location is not set.
  

Проблема в том, что getResource неправильно загружается FXML, поэтому setLocation получает null в качестве параметра, и я запускаю исключение loader.load()

Что я видел в некоторых ответах, так это то, что проблема может быть в неправильном пути в getResource. Но, насколько я знаю, «/baseLayout.fxml» должен указывать на соответствующий файл fxml внутри папки ресурсов.

Вот дерево файлов моего проекта:

  • проект/
    • Src/
      • Главная/
        • java/
        • Ресурсы/
          • Базовое описание.fxml

Разве это не должно работать? На самом деле я работал просто отлично, но внезапно это не так. Я не знаю, что еще делать.

Комментарии:

1. Это должно сработать, если ваша папка ресурсов будет развернута в корне classpath. Проверьте содержимое вашей папки сборки, чтобы убедиться, что файл FMXL находится там.

2. Я думаю, возможно, в этом проблема, я не вижу файлов FXML. Почему они не развертываются?

3. Это настройка IDE, поэтому она зависит от вашей IDE. Вам нужно будет перейти к настройке проекта и убедиться, что папка resources включена в сборку (и, возможно, что файлы FXML скопированы в развертывание).

Ответ №1:

Вы можете попробовать загрузить fxml следующим образом

 loader.setLocation(BaseController.class.getResource("/resources/baseLayout.fxml"));
  

или

 loader.setLocation(BaseController.class.getResource("../resources/baseLayout.fxml"));
  

Но перед этим, как упоминал @James_D, пожалуйста, проверьте, содержит ли результирующий jar папку ресурсов, т. е. присутствует ли она в сборке или нет.