Java, JavaFX. Использование картинок после преобразования проекта в .jar

Java 11, JavaFX 11

Как использовать картинку в проекте, который преобразован в .jar?

Преобразовал проект в .jar, но при его запуске он не может найти картинки, они не отображаются в моем проекте.

Использовал для создания картинок конструкции вида new Image("file:icons/area/doors/airlock.png"), позднее используемых в ImageView(). При запуске проекта через IntelliJ IDEA картинки спокойно находились и отображались, но в .jar файле - нет.

Попытался погуглить, нашел информацию по getResourceAsStream() и getResource(), но в такой конструкции:

new Image(getClass().getResourceAsStream("icons/area/doors/airlock.png"))

вылетает ошибка: Caused by: java.lang.NullPointerException: Input stream must not be null

Конструкции вида new Image(getClass().getResource("icons/area/doors/airlock.png").toExternalForm()) или new Image(getClass().getResource("icons/area/doors/airlock.png").toURI().toURL().toString()) вызывают эту же ошибку.

Папка с картинками находится в корне проекта, но не в папке с кодом. Например projectName/icons/area/doors/airlock.png


Ответы (1 шт):

Автор решения: Lizurt

Для использования картинок нужно создать ресурсную папку. В IntelliJIDEA это можно сделать в контекстном меню после ПКМ по какой-либо папке, в которой будет ваша картинка/другой ресурс. Приведу пример из своего проекта:

Пример пометки папки как ресурсной папки

После этого картинку можно использовать, например, так:

new Image(getClass().getResourceAsStream("/icons/area/doors/airlock.png"));

Писать в пути к файлу ресурсную папку не нужно.

→ Ссылка