Java Swing: отображение изображений внутри Jar

java swing embedded-resource imageicon

35026 просмотра

5 ответа

110595 Репутация автора

При запуске Java-приложения из Eclipse мой ImageIcon обнаруживается просто отлично.

Но после создания банки путь к изображению, очевидно, искажается.

Есть ли способ извлечь изображение из банки во время выполнения, чтобы я мог открыть его? Или есть лучший способ сделать это?

Я хотел бы распространять один файл JAR, если это возможно.

Автор: jjnguy Источник Размещён: 27.08.2008 08:14

Ответы (5)


21 плюса

8312 Репутация автора

Вы можете попробовать что-то вроде:

InputStream stream = this.getClass().getClassLoader().getResourceAsStream("/images/image.jpg");

В вашем JAR-файле вы можете иметь структуру каталогов:

MyJAR.jar
- com (файлы классов здесь)
- images
---- image.jpg

Автор: Outlaw Programmer Размещён: 27.08.2008 08:18

33 плюса

129712 Репутация автора

Решение

Чтобы создать ImageIconиз файла изображения в тех же банках ваш код загружается:

new javax.swing.ImageIcon(getClass().getResource("myimage.jpeg"))

Class.getResourceвозвращает URL ресурса (или null!). ImageIconимеет конструкторы, которые загружаются из URL.

Чтобы создать URL для ресурса в банке, находящейся не в вашем «classpath», см. Документацию для java.net.JarURLConnection.

Автор: Tom Hawtin - tackline Размещён: 05.09.2008 11:30

10 плюса

4342 Репутация автора

Это работает для меня, чтобы загрузить и установить фоновое изображение панели содержимого:

jar (или путь сборки) содержит:

 - com
 - img
 ---- bg.png

Ява содержит:

JFrame f = new JFrame("Testing load resource from jar");
try {
    BufferedImage bg = ImageIO.read(getClass().getResource("/img/bg.png"));
    f.setContentPane(new ImagePanel(bg));
} catch (IOException e) {
    e.printStackTrace();
}

Протестировано и работает как в jar, так и в unjarred (это технический термин) исполнении.

КСТАТИ getClass().getClassLoader().getResourceAsStream("/img/bg.png")- который я попробовал первым - вернул мне нулевой InputStream.

Автор: ekerner Размещён: 12.03.2013 05:09

0 плюса

61 Репутация автора

Загрузка изображения из файла Jar во время выполнения аналогична загрузке изображения при выполнении из IDE, например, netbeans, разница в том, что при загрузке изображения из файла JAR путь должен быть правильным и учитывать регистр символов (очень важно). Это работает для меня

 image1 = новый javax.swing.ImageIcon (getClass (). getResource ("/ Pictures / firstgame / привычка1.jpg"));
        img = image1.getImage (). getScaledInstance (lblhabitat1.getWidth (), lblhabitat1.getHeight (), Image.SCALE_SMOOTH);
        lblhabitat1.setIcon (новый ImageIcon (img));

если p в "/Pictures/firstgame/habitat1.jpg" в нижнем регистре, оно не будет работать. проверить пробелы, кейсы и орфографию

Автор: Tobore Igbe Размещён: 07.12.2015 04:10

1 плюс

458 Репутация автора

В netbeans 8.1 я включил папку с иконками и другими изображениями под названием Resources в папку src в файле проекта. Поэтому всякий раз, когда я собираю Jar- файл, папка включается туда. Дерево файлов должно выглядеть так:

  • src (файлы Java в исходных пакетах здесь)
  • ** УПАКОВКА, которую вы назвали в проекте **

    • file.java
  • Ресурсы

    • image.jpg

Код должен быть таким:

jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.jpg")));
Автор: Abdelsalam Shahlol Размещён: 07.02.2017 08:21
Вопросы из категории :
32x32