#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 папку ресурсов, т. е. присутствует ли она в сборке или нет.