ClassLoader.getSystemClassLoader (). GetResourceAsStream возвращает значение null после клонирования Project - PullRequest
0 голосов
/ 12 октября 2018

Прежде всего это не дубликат , потому что я использую решения других подобных вопросов, но я единственный, у кого есть эта особая проблема, пожалуйста, прочитайте полный вопрос.

Я получал изображение из папки res с помощью этой строки:

shell.setImage(new Image(display, ClassLoader.getSystemClassLoader().getResourceAsStream("icon_128.png")));

файл находится внутри папки "res" в проекте.

Он работал идеально, пока я не загрузил свойпроект для репозитория GIT в bitbucket.После клонирования проекта и его импорта, теперь мой проект аварийно завершает работу, потому что getResourceAsStream ("icon_128.png") возвращает ноль.

Это очень расстраивает, потому что прекрасно работает в другом проекте, который не имеет версий в git, но падаеттолько в моем клонированном новом проекте каталога с git.

В обеих версиях проекта файл находится в папке "res".

Пожалуйста, у вас есть какие-либо идеи о том, что происходит сэто?

1 Ответ

0 голосов
/ 12 октября 2018

git не имеет к этому никакого отношения.Вы не предоставили достаточно подробностей, чтобы быть уверенными в том, что происходит, но на ум приходят 2 очевидные проблемы:

[1] getResourceAsStream ищет именованный файл там же, где java ищет файлы классов: Путь к классамВы запускаете этот код либо из редактора, либо с java в командной строке (в этом случае вы запускаете файл jar, и инструмент сборки добавляет запись Class-Path к этому jar, если вы используете -jar, или нет, в этом случае вы указываете classpath в командной строке), или с помощью инструмента сборки (в этом случае он будет указывать classpath): icon_128.png должен быть вкорень одной из записей на пути к классам, и теперь это не так.Исправление заключается в том, чтобы исправить это.Maven, например, копирует все ресурсы, найденные в / src / main / resources, в любые jar-файлы, которые он создает.Ваш icon_128.png должен быть там.

[2] Это неправильный способ сделать это.Правильный путь - ClassThisCodeIsIn.class.getResourceAsStream("/icon_128.png") (примечание: начальная косая черта; это важно).В вашей версии есть несколько необычных случаев сбоя, которые эта версия пропускает.Эта версия будет специально искать в пути к классам, который создал ваш файл класса, и не может NPE;ваша версия будет давать сбой или генерировать исключения NullPointerExceptions в различных случаях.

NB. При клонировании и повторной сборке каталоги 'build' были фактически стерты, поскольку вы не проверяете их в системе контроля версий.Вот почему это работало раньше, а сейчас нет.мерзавец не виноват;Вы или ваша IDE скопировали icon_128.png в каталог сборки, и этот шаг нужно повторять каждый раз, когда вы клонируете свое git-репо.Инструмент сборки автоматизирует этот шаг и гарантирует, что вы можете просто сделать новую проверку из системы контроля версий, а затем вызвать инструмент сборки, и все будет хорошо после его завершения.

...