Мы пишем приложение Java с использованием JavaFX. На данный момент у нас есть 3 разные формы:
- Авторизоваться
- Окно игры
- Регистрация
Для нашей следующей итерации мы хотим реализовать форму регистрации, но получаем ошибку IOException Unknown Path
Речь идет об этом фрагменте кода:
FXMLLoader registrationLoader = new FXMLLoader();
try{
mainroot = (Parent)registrationLoader.load(this.getClass().getResource("FXMLRegistration.fxml").openStream());
Stage registrationStage = new Stage();
Scene scene = new Scene(mainroot);
registrationStage.setScene(scene);
registrationStage.setTitle("Register your account");
registrationStage.show();
} catch(IOException ex)
{
System.out.print(ex.getMessage());
}
Приведенный выше код работает, когда я меняю FXMLRegistration.fxml
на FXMLDocument.fxml
или FXMLLoader.fxml
.
Когда я меняюсь
mainroot = (Parent)registrationLoader.load(this.getClass().getResource("FXMLRegistration.fxml").openStream());
to
mainroot = (Parent)registrationLoader.load(Paths.get("src/hackattackfx/FXMLRegistration.fxml").toUri().toURL());
Я получаю абсолютный путь в выводе отладчика, что правильно, когда я использую его с командой file
в терминале.
Я надеюсь, что кто-то может помочь нам с этой ошибкой.
Заранее спасибо!
ИЗМЕНИТЬ
Я изменил некоторый код на следующее:
FXMLLoader registrationLoader = new FXMLLoader(getClass().getResource("/FXMLRegistration.fxml"));
mainroot = (Parent)registrationLoader.load();
но это вернет исключение IllegalStateException: местоположение не установлено. Когда я удаляю /
перед /FXMLRegistration.fxml
, я получаю свой блок catch, печатающий полный путь к файлу:
файл:/Users/juleskreutzer/Documents/github/PTS3/HackAttackFX/dist/run1793658053/HackAttackFX.jar!/hackattackfx/FXMLRegistration.fxml
Также изменение пути на src/hackattackfx/FXMLRegistration.fxml
приведет к исключению IllegalStateException: Location not set.
Структура проекта
Мы используем разные пакеты в нашем приложении. все эти пакеты находятся в пакете по умолчанию: hackattackfx
Пакеты в пакете по умолчанию:
- Default Package
- Exceptions
- Интерфейсы
- перечисления
- Ресурсы
- Шаблоны
- Пакет JSON
Мои документы FXML находятся в пакете по умолчанию (hackattackfx). Если не совсем понятно, как я упорядочил свои файлы, взгляните на мой репозиторий на Github
Paths.get("src/hackattackfx/FXMLRegistration.fxml").toUri().toURL()
, это работает? Вы собираетесь использоватьPaths.get()
? Если да, то почему? - person ItachiUchiha   schedule 09.11.2015getClass().getResource()
, если ваш файл присутствует в пути к классам. Paths.get() не имеет смысла в таких обстоятельствах. - person ItachiUchiha   schedule 09.11.2015