Ресурсы должны быть загружены поверх Test.class
, а не его ClassLoader. Загружая ресурс над классом, вы устанавливаете sh контекст (JAR, модуль, зависимости) для расположения ресурса.
Для ресурсов в том же пакете используйте относительный путь:
Test.class.getResource("logo.png")
Если квалифицированное имя Test равно org.foo.Test
, он будет искать ресурс в org/foo/logo.png
в JAR (или в папке ресурсов, перед сборкой JAR).
Для ресурсов в том же модуле используйте абсолютный путь, начиная с sla sh:
Test.class.getResource("/logo.png")
^ это то, что вы хотите использовать большую часть время.
Нет необходимости go над загрузчиком классов . Я часто вижу это, когда разработчики не знают, как правильно обращаться к ресурсу, и загружают ресурс с относительным путем , но поверх загрузчика классов , который работает большую часть времени, но не очень хорошо с модульными проектами / загрузчиками классов, такими как Java9 и OSGI.