Не удается получить доступ к файлу в папке ресурсов - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь загрузить изображение, которое хранится в папке / src / main / resources. Однако, когда я это делаю, я продолжаю сталкиваться с NullPointerException, который возникает из-за того, что ресурс не найден.

Вот фрагмент кода:

        try {
            String path = this.getClass().getClassLoader().getResource("bern.png").toString();
        } catch (IOException ex) {
            System.out.println(path);
        }

Вот изображение файла моего проектадерево:

An image of my project file tree

А вот изображение моего целевого дерева файлов сборки:

An image of my target build file tree

Вот трассировка стека NullPointerException: https://pastebin.com/KqJVxWEL

Я попытался очень хорошо использовать все возможные пути для файла изображения, о котором я могу подумать. (/src/main/resources/bern.png, src / main / resources / bern.png, /bern.png и т. д.).

Я также пытался использовать getClass().getClassLoader().getResource() вместо getClass().getResource(),Из того, что я понимаю, единственная разница между Class и ClassLoader версией getResource() заключается в том, что версия Class не является абсолютно абсолютной по отношению к корню, тогда как версия ClassLoader есть.

Когда я запускаю getClass().getResource("").toPath(), я получаю путь, ведущий к каталогу classes. Это соответствует тому, что я читал о getResource() методе работы с целевым деревом файлов сборки. Тем не менее, я не вижу папки ресурсов, отображаемой в целевой сборке;Я думаю, что это суть моей проблемы. Я просто не уверен, как это исправить.

Я знаю, что этот вопрос задавали много раз прежде, но ответы на другую версию этого вопроса не сильно помогли мне.

Я использую NetBeans 11, и этот проект выполняется в системе сборки Maven. В прошлом я мало работал с Maven, так что извините, если эту проблему очень легко решить.

Кто-нибудь знает, как я подхожу к этому неправильно?

РЕДАКТИРОВАТЬ: Проблема заключается не в моей структуре проекта или коде, как показано в коде, правильно компилируемом при запуске с использованием mvn из командной строки. В результате проблема связана именно с NetBeans и с тем, как он просматривает папку ресурсов.

1 Ответ

0 голосов
/ 10 октября 2019

Чтение содержимого ресурса в виде потока (вместо URL или пути к файлу)

public static void main(String[] args) throws IOException {
        InputStream in = Application.class.getClassLoader().getResourceAsStream("bern.png");
        BufferedImage testImage = ImageIO.read(in);
        ImageIcon icon = new ImageIcon(testImage);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...