Попытка загрузить значок из файла jar

Я пытаюсь загрузить значки из файла jar. Я попытался загрузить его из классов в файле jar, а также классов вне файла jar.

вне jarfile - возвращает исключение null

java.net.URL imageURL = LoadHTMLExample.class.getClassLoader()
    .getResource("icons/mouse.png");

в стороне файла jar в LoadHTMLExample

java.net.URL imageURL = this.getClass().getClassLoader()
    .getResource("icons/mouse.png");

получить ту же ошибку.

Я также пробовал варианты "значки", "/значки" "значки/" "/icons/mouse.png" "icons/mouse.png"

Кажется, что ничего не работает

значок находится в файле jar

jar
 --icons --- {all the images}

 --com.blah.blah

Ответ 1

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

InputStream stream = LoadHTMLExample.class
    .getResourceAsStream( "/icons/mouse.png" );
BufferedImage image = ImageIO.read( stream );

Пользователю нужен URL-адрес, который возвращает нас всем остальным предложениям. Изображения, безусловно, находятся в банке, не так ли?

Ответ 2

Я всегда использовал загрузчик системного класса, путь которого относится к корню JAR:

URL url = ClassLoader.getSystemClassLoader().getResource("icons/mouse.png");
Icon icon = new ImageIcon(url);

Ответ 3

Я думаю, что getResource получает ресурс относительно местоположения LoadHTMLExample.class. Поэтому ваш jarfile должен быть структурирован следующим образом:

myjar.jar
 |
 |- ...
 |- LoadHTMLExample.class
 |- ...
 \-- icons
      |
      \- mourse.png

Кроме того, вы можете получать поток через getResourceAsStream, чем получать URL.

Ответ 4

Является ли рассматриваемая jar на пути к классам вашей среды выполнения? У меня есть банка с PNG в ней, и я могу воссоздать нули, если я не включу ее в путь к классам. Если кувшин там, они уходят.

Ответ 5

final java.net.URL imageURL3 = com.java.html.LoadHTMLExample.class.getResource( "icons/" );

работает для ниже структуры каталогов

myJar.jar  |  | - Общение  | - Охота и рыбалка  | - Общение  - иконки     |     - mourse.png

Спасибо за помощь всем

Ответ 6

Icon icon = new ImageIcon(ClassLoader.getSystemResource("icons/mouse.png"));

Из JavaDoc getSystemResource():

Найти ресурс с указанным именем из пути поиска, используемого для загрузки классов...

Это найдет ваши иконки даже в jar файле.