Java getResourceAsStream Возвращает исключение NullPointerException? - PullRequest
0 голосов
/ 08 декабря 2018

Это, без сомнения, будет помечено как дубликат, но я решил, что все равно попробую.Я посмотрел на все связанные вопросы, которые были заданы, и я искал в Интернете, и я не могу найти решение этой проблемы.
Я пытаюсь использовать Java FX diffuseMap для текстурированияBox.Однако при использовании

PhongMaterial material = new PhongMaterial();
material.setDiffuseMap(new Image(getClass().getResourceAsStream("/Eternity/Images/ice.png")));
b.setMaterial(material);

я получаю исключение NullPointerException;

java.lang.NullPointerException: Input stream must not be null

Я пытался связываться с именем файла, путями, различными способами выполнения одной и той же задачи (все из которых все еще участвуютInputStreams) и даже копирование и вставка фактического пути к файлу (используя кнопку Intellij's Copy File Path), но я не могу решить эту проблему.Похоже, что это никак не влияет на ошибку.

Вот взгляд на иерархию проекта, за исключением основной папки проекта.project hierarchy

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

0 голосов
/ 08 декабря 2018

Похоже, вы используете Intellij, просто перетащите каталог images, поместите его в каталог src и переименуйте путь в

... .getResourceAsStream("/Images/ice.png")));

@ JB NizetЯ хорошо объяснил, почему это не работает.

Мое решение - временное исправление, правильный способ - правильно настроить каталог ресурсов и затем поместить туда свои ресурсы.Я предлагаю вам пройти через Intellij Модули

0 голосов
/ 08 декабря 2018

Class.getResourceAsStream() использует загрузчик классов для загрузки ресурса из пути к классам.Итак, чтобы ваш код работал, каталог, содержащий каталог Eternity, должен находиться в пути к классам.Поскольку это не так, ресурс не может быть найден загрузчиком классов, и возвращается null, как описано в документации.

Итак, либо измените путь к классу запущенной программы, либо переместите изображения в исходную папку,так что ваша IDE (и, надеюсь, ваш инструмент для сборки / упаковки) копирует изображения в каталог, где скомпилированы файлы классов.И затем, конечно, используйте правильный путь (то есть полное имя пакета, но с косой чертой вместо точек и с косой чертой).Если изображение в src/foo/bar/ice.png, пакет - foo.bar, и путь для использования, таким образом, /foo/bar/ice.png.

...