.jar не найдет изображения внутренних ресурсов, но скомпилированная программа - PullRequest
0 голосов
/ 05 апреля 2020

Я пытался загрузить некоторые изображения для использования в моем Swing-интерфейсе, и хотя моя скомпилированная программа будет загружать изображения правильно, мой .jar не находит изображения .

Прежде всего, я пометил свой файл ресурсов как «Ресурс Root». Макет проекта выглядит следующим образом:

project layout shown.Outside of the source folder, there is the resource folder, and inside it an images folder with the resources in question.

Схема вывода компиляции выглядит следующим образом:

enter image description here

.jar-макет выглядит следующим образом:

enter image description here

Теперь код, который загружал изображения, находится внутри gui пакет; вот оно:

        try {
            System.out.println(this.getClass().getResource("../images/buttonClip.png").getPath());
            attchmntBtnImg = ImageIO.read(getClass().getResource("../images/buttonClip.png"));
            sendMsgBtnImg  = ImageIO.read(getClass().getResource("../images/buttonForward.png"));
        }
        catch (IOException e) {
            e.printStackTrace();
        }

Вывод строки печати правильно печатает путь к изображению

/C:/Users/path/to/Project/out/production/Peer2Party_desktop/images/buttonClip.png

Хотя при запуске из Intellij idea нет ошибок, сгенерирован артефакт (если Я запускаю его из cmd, с правами администратора или без него), я получаю исключение NullPointerException в System.out.println (), но, несомненно, это не является причиной ошибки, так как она все равно вызовет sh на на следующей строке, даже если я удалю печать.

enter image description here

Я пытался сделать это для загрузки изображений, но безрезультатно:

this.getClass().getResource("/../images/buttonClip.png");
getClass().getResource("/../images/buttonClip.png");
this.getClass().getResource("images/buttonClip.png");
getClass().getResource("images/buttonClip.png");
this.getClass().getResourceAsStream("images/buttonClip.png");
getClass().getResourceAsStream("images/buttonClip.png");

Любая помощь очень ОЧЕНЬ приветствуется.

Важное примечание: Я нахожусь на windows 10, изображения находятся в правильном пути (file.jar / images / buttonClip.png), но во время выполнения .class не найдет его

1 Ответ

2 голосов
/ 05 апреля 2020

Просто используйте

this.getClass().getResource("/images/buttonclip.png");

, он ищет файл из проекта root каталог

...