Вопрос

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

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

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

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

Это было полезно?

Решение

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

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

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

Чтобы создать URL-адрес для ресурса в jar, не указанного в вашем "пути к классу", смотрите Документацию для java.net.JarURLConnection.

Другие советы

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

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

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

MyJAR.jar
- com (файлы классов здесь)
- изображения
----image.jpg

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

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

 - com
 - img
 ---- bg.png

java содержит:

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") - который я попробовал первым - вернул мне нулевой входной поток.

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

  • src (Java-файлы в исходных текстах находятся здесь)
  • ** ПАКЕТ, КОТОРЫЙ ВЫ НАЗВАЛИ В ПРОЕКТЕ**

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

    • image.jpg

Код должен быть похож на:

jToggleButton1.setIcon(new javax.swing.ImageIcon(this.getClass().getResource("/resources/image.jpg")));

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

 image1 = new javax.swing.ImageIcon(getClass().getResource("/Pictures/firstgame/habitat1.jpg"));
        img = image1.getImage().getScaledInstance(lblhabitat1.getWidth(), lblhabitat1.getHeight(), Image.SCALE_SMOOTH);
        lblhabitat1.setIcon(new ImageIcon(img));

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top