it-swarm.com.ru

Eclipse экспортировал Runnable JAR, не показывая изображения

Мои изображения не будут загружаться при запуске файла JAR, экспортированного из Eclipse.

У меня есть изображения в пакете класса ресурсов. Я попробовал папку с исходными изображениями, но не повезло.

Отлично работает при загрузке из Eclipse. Изображения находятся в экспортированном файле JAR, поэтому они хорошо экспортируются.

Я пробовал:

label.setIcon(new ImageIcon(MainFrame.class.getResource("/resources/header.jpg")));

Я также попробовал:

URL url = getClass().getResource("/resources/header.jpg");
Image image = Toolkit.getDefaultToolkit().getImage(url);
label.setIcon(new ImageIcon(image));

А также:

try
{
    label.setIcon(new  ImageIcon(ImageIO.read(getClass().getResource("/resources/header.jpg"))));
}
catch (IOException e1)
{
    e1.printStackTrace();
}

Какие-либо предложения?

30
DeNitE Appz

Проблема заключалась в том, что у меня был этот проект в моем профиле Windows ..., который имел "!" в нем ... (DeNitE! -> было именем моего профиля Windows)

Как только я изменил его на DeNitE (без!), Он работал нормально ...

1
DeNitE Appz

У меня отлично работает. Проверьте, что у вас может быть другим. 

Пример 1: (ресурсы in src)

Шаги:

  1. Файловая структура

    enter image description here

  2. Код

    package com.stackoverflow.test;
    
    import Java.net.URL;
    import javax.swing.*;  // Wild carded for brevity. 
                           // Actual code imports single classes
    public class Main {
        public static void main(String[] args) {
            SwingUtilities.invokeLater(new Runnable(){
                public void run() {
                    URL url = Main.class.getResource(
                                         "/resources/stackoverflow.png");
                    ImageIcon icon = new ImageIcon(url);
                    JFrame frame = new JFrame();
                    frame.add(new JLabel(icon));
                    frame.pack();
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    frame.setLocationRelativeTo(null);
                    frame.setVisible(true);
                }
            });
        }
    }
    
  3. [Щелкните правой кнопкой мыши на проекте] → [Экспорт] → [Runnable Jar File] → [Настройка конфигурации запуска]

    enter image description here

  4. Прибыль

    enter image description here

К вашему сведению, та же настройка работает в Eclipse просто отлично


Пример 2: (ресурсы not в src - но в проекте)

Шаги:

  1. Структура файла (ресурсы уведомлений выглядят как обычные папки)

    enter image description here

  2. То, что мы должны сделать сейчас, это поместить ресурсы в путь сборки. Для этого нужно поместить все в папку (кроме самой папки) в путь к классам.

    • Щелкните правой кнопкой мыши по проекту и перейдите к [Build Path] → [Configure Build Path]

      enter image description here

    • На вкладке [Источники] в диалоговом окне выберите [Добавить папку] и в новом диалоговом окне выберите папку [ресурсы].

      enter image description here

    • Теперь content папки ресурсов находится в пути сборки (теперь обратите внимание на небольшой пакет в папке

      enter image description here

  3. Новый код больше не использует префикс ресурсов для пути

    URL url = Main.class.getResource("/stackoverflow.png");
    
  4. То же, что шаг 3 и 4 сверху, и прибыль!


ОБНОВЛЕНИЕ

Настройка конфигурации запуска

Как правило, после запуска класса (т. Е. Щелкните правой кнопкой мыши по классу и запустите приложение от Java), будет настроена конфигурация запуска. Это нужно будет указать в качестве точки запуска в манифесте. Но вот как это сделать вручную.

Шаги:

  1. [Проект правой кнопкой мыши] → [Свойства] → [Настройки запуска/отладки]

    enter image description here Вы можете видеть, что у меня уже есть конфигурация запуска (которая неявно установлена ​​из простого запуска класса). Но чтобы создать новый, выберите [New] → [Java Application]

  2. Создайте имя для запуска конфигурации и найдите или введите основной класс запуска. В моем случае это класс com.stackoverflow.test.Main

    enter image description here

  3. Теперь, когда вы экспортируете, как показано в примере выше, вы выбираете конфигурацию запуска

    enter image description here

  4. Запустите банку, как указано выше.


ПРАВКА

Результат для проверки

Manifest:

Manifest-Version: 1.0
Rsrc-Class-Path: ./
Class-Path: .
Rsrc-Main-Class: com.stackoverflow.test.Main
Main-Class: org.Eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

Извлеченная банка:

enter image description here

72
Paul Samsotha

Я обнаружил, что когда ты изменился: 

Упакуйте необходимые библиотеки в сгенерированный jar

в

Извлеките необходимые библиотеки в сгенерированный jar

в конфиге «Настройка запуска» у меня это сработало.

 Extract Required Libraries Button

2
sazzy4o

Другой обходной путь - если вы поместите файл ресурсов, файл .jar в то же место, он должен работать. Единственным недостатком является то, что у вас всегда должны быть ресурсы с файлом JAR.

Если это не проблема, вы можете сделать это таким образом.

1
Nevets17

У меня та же проблема .. Вы можете использовать это ..

Image Icon= new ImageIcon(new WE4().getClass().getResource("IC.jpg"))

Здесь WE4 - мое имя конструктора класса. Надеюсь, это поможет.

1
Md. Sakib Hossain

Для создания исполняемого JAR-файла из Eclipse мы можем обратиться к статье «Создание исполняемых JAR-файлов в Eclipse (или другой IDE ... или вручную):» ( https://www.cefns.nau.edu/~edo /Classes/CS477_WWW/Docs/RunnableJarsinEclipse.html ), упоминалось, что нам нужно сделать четыре вещи, как

  1. Обязательно создайте пакет для нашего кода, а не просто создайте проект в Eclipse
  2. Создайте подпакет (подпапку) для наших файлов ресурсов в основном пакете нашего кода (обратите внимание, что этот подпакет находится в основном пакете, а не только в проекте)
  3. получить все ссылки на файлы из getResource () (получить ссылку на URL)
  4. Экспорт файлов в качестве исполняемого JAR-файла в Eclipse (Файл -> Экспорт ... -> выберите Runnable JAR-файлы -> далее -> ...)

Но для файла изображения в примере кода вышеупомянутой статьи он только создает ImageIcon, он не создает изображение SWT, и в Интернете есть много вопросов о том, как получить изображение SWT из URL или как преобразовать ImageIcon в изображение SWT, ниже приведен пример кода для получения изображения SWT с URL,

Image imgSWT=null;  // Image class is the SWT Image class
ImageDescriptor imgDesc=null;
Java.net.URL imgURL = YourClassName.class.getResource("path/image_filename");

if (imgURL != null) {
    imgDesc = ImageDescriptor.createFromURL(imgURL);
    imgSWT = imgDesc.createImage();
}
1
phchen2

Если вам не нужны файлы в банке, это, вероятно, самый простой способ сделать это: 

header = ImageIO.read(new File("./resources/header.jpeg"));

заголовок должен быть Image/BufferedImage. Это идет к папке, в которой находится исполняемый файл jar, и ищет папку с именем resources . http://i.stack.imgur.com/x8xtO.png

0
TheChubbyPanda

Два простых шага:

1 - добавить папку в путь сборки;

2 - Используйте это:

    InputStream url = this.getClass().getResourceAsStream("/load04.gif");
    myImageView.setImage(new Image(url));
0
Michel Fernandes