Ответ 1
Я решил эту проблему, указав resource root
на IDEA.
Right click
в каталоге (или просто имени проекта) → Mark directory As
→ resource root
.
Перекомпилируйте и радуйтесь: P Надейтесь, что это сработает для вас ~
Я использую IntelliJ IDEA 13.1.5, я работал с Eclipse. Я работаю над приложением JavaFX, я пытаюсь загрузить файл FXML в моем классе MainApp, используя getClass(). GetResource(). Я прочитал документацию, и я попробую несколько идей, в конце у меня null.
Это иерархия:
dz.bilaldjago.homekode.MainApp.java
dz.bilaldjago.homekode.view.RootLayout.FXML
Это фрагмент кода, который я использовал:
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("view/RootLayout.fxml"));
Я пробовал другое решение, такое как указание url из корня и использование classLoader
результат тот же. Любая идея, пожалуйста,
Я решил эту проблему, указав resource root
на IDEA.
Right click
в каталоге (или просто имени проекта) → Mark directory As
→ resource root
.
Перекомпилируйте и радуйтесь: P Надейтесь, что это сработает для вас ~
Для тех, кто использует Intellij Idea: проверьте Settings -> Compiler -> Resource patterns
.
Параметр содержит все расширения, которые должны интерпретироваться как ресурсы. Если расширение не соответствует какому-либо шаблону здесь, class.getResource будет возвращать null для ресурсов, используя это расширение.
Если ваш проект является проектом maven, проверьте целевой код, чтобы увидеть, существует ли там файл .fxml. если его там нет, просто добавьте
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>true</filtering>
</resource>
</resources>
в вашем pom.xml
Поместите свои ресурсы в папку resources
.
Используйте их с одной косой чертой перед их именами: getClass().getResource("/myfont.ttf");
Если вы используете Intellij IDEA
и создали проект Maven
, вы должны поместить свои ресурсы в папку resources
(помеченную как корень ресурса самим intellij), и эти ресурсы перейдут в корень скомпилированного приложения.
Я имею в виду, /resources/myfont.ttf
перейдет к /myfont.ttf
в итоговой сборке.
Так что вы должны получить его через /myfont.ttf
, а не myfont.ttf
. Используйте это так:
getClass().getResource("/myfont.ttf");
Не нужно ничего менять. Просто этот мне помог.
Я сдался, пытаясь использовать
getClass().getResource("BookingForm.css"));
Вместо этого я создаю объект File, создаю URL-адрес из этого объекта, а затем передаю его в getStyleSheets() или setLocation()
File file = new File(System.getProperty("user.dir").toString() + "/src/main/resources/BookingForm.css");
scene.getStylesheets().add(folder.toURI().toURL().toExternalForm());
Windows чувствительна к регистру, а остальная часть мира - нет. Также исполняемый java jar (zip-формат) имена ресурсов чувствительны к регистру.
Лучше всего переименуйте файл
view/RootLayout.FXML
к
view/RootLayout.FXML
Это нужно сделать, перемещая исходный файл и создавая новый.
Также скомпилируйте банку и проверьте, что файл fxml был добавлен в jar (zip файл). Когда не пройден путь к ресурсам IntelliJ другим способом.
Кстати, это путь относительно пути пакета getClass()
. Имейте в виду, что если вы расширили этот класс, измените полный путь, лучше используйте:
MainApp.class.getResource("view/RootLayout.fxml")