Поскольку вы используете Java 11 и модульную систему, ваш каталог вывода ресурсов должен находиться в том же каталоге вывода, что и модуль, к которому они принадлежат.
Судя по изображениям в вашем посте, выиспользуя gradle, и вы строите свой проект непосредственно из IDEA.
Вы должны указать IDE скопировать ваши ресурсы в тот же выходной каталог:
//build.gradle
plugins {
...
id 'idea' //add idea plugin
}
...
//put compiled classes and resources in the same directory (change the path if needed)
idea.module.outputDir file("out/production/classes")
Если вы планируете строить также с помощью gradle:
//put compiled classes and resources in the same directory (change the paths if needed)
sourceSets.main.output.resourcesDir = "build/classes/java/main"
sourceSets.test.output.resourcesDir = "build/classes/java/test"
и вам, вероятно, потребуется открыть пакет с файлами ресурсов, чтобы инфраструктура могла получить к ним доступ:
//module-info.java
module YourModuleName {
...
opens ui.battle to afterburner.fx; //add this
}
edit:
«Idea» в «idea.module.outputDir» отображается серым цветом с ошибкой «Не удается разрешить символ« idea »».
На самом деле это не ошибка, но вы легко можете от нее избавиться:
//use this format instead of the previous one
idea {
module.outputDir file("out/production/classes")
}
Я получаю ошибку nullPointer из входных потоков, в которые я пытаюсь загрузить ресурсы, такие как: setImage (new Image (getClass (). GetClassLoader (). GetResourceAsStream ("images /щ / mineStartButton.png ")));
Не звоните getClassLoader()
, иначе вам потребуется открыть пакет с ресурсом изображения - даже если код вызова находится в том же модуле (отметьте Javadoc ):
//you need to add '/' at the beginning of the path string to make it absolute
getClass().getResourceAsStream("/images/ui/mineStartButton.png")