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

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();
}

Любые предложения?

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

Шаги:

  • Структура файла

    enter image description here

  • код

    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);
                }
            });
        }
    }
    
  • [Щелкните правой кнопкой мыши по проекту] → [Экспорт] → [Runnable Jar File] → [Настройка конфигурации запуска]

    enter image description here

  • Profit

    enter image description here

FYI, та же самая установка работает в eclipse просто отлично.


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

Шаги:

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

    enter image description here

  • Теперь нам нужно поместить ресурсы на путь сборки. Это делает все, что находится в папке (за исключением самой папки) в пути к классам

    • Щелкните правой кнопкой мыши по проекту и перейдите к [Путь сборки] → [Настроить путь сборки]

      enter image description here

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

      enter image description here

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

      enter image description here

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

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


UPDATE

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

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

Шаги:

  • [Right Click Project] → [Свойства] → [Run/Debug Settings]

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

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

    enter image description here

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

    enter image description here

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


ИЗМЕНИТЬ

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

манифеста:

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

Ответ 3

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

Пакетные библиотеки, необходимые для создания jar

к

Извлечение необходимых библиотек в сгенерированную банку

в настройке "Настройка запуска" он работал у меня.

Извлечь обязательные библиотеки

Ответ 4

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

  • Обязательно создайте пакет для нашего кода, а не просто создайте проект в Eclipse
  • Создайте подпакет (подпапку) для наших файлов ресурсов в основном пакете нашего кода (обратите внимание, что подпакет находится в основном пакете, не только в проекте)
  • получить все ссылки на файлы из getResource() (получение ссылки на URL)
  • Экспорт файлов в исполняемый JAR в Eclipse (Файл → Экспорт... → выберите Runnable JAR files → next → ...)

Но для файла изображения в приведенном выше примере кода он создает только ImageIcon, он не создает SWT-изображение, и в Интернете есть много вопросов о том, как получить SWT-изображение из URL-адреса или как преобразовать ImageIcon в SWT Image, ниже приведен пример кода для получения 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();
}

Ответ 5

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

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

Ответ 6

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

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

Заголовок

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

Ответ 7

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

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

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

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

Ответ 8

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

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

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