Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

Ответ 3

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

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 (это технический термин).

BTW getClass().getClassLoader().getResourceAsStream("/img/bg.png") - который я попробовал в первую очередь - вернул мне пустой InputStream.

Ответ 4

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

  • src (файлы Java в исходных пакетах здесь)
  •   
  • ** ПАКЕТ, ВЫ НАХОДЯЩИЙСЯ В ПРОЕКТЕ **

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

         
      
    •     
    • image.jpg    
      
      

Код должен выглядеть следующим образом:

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

Ответ 5

Загрузка изображения из файла 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" находится в нижнем регистре, он не будет работать. проверки пробелов, случаев и орфографии