Исполняемый файл Jar не получает ресурсы [дублировать]

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

27
задан Francesco Menzani 1 September 2015 в 14:30
поделиться

8 ответов

Проблема в том, что у меня был этот проект в моем профиле Windows ... у которого был «!» в нем ... (DeNitE! -> было именем моего профиля Windows)

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

0
ответ дан DeNitE Appz 19 August 2018 в 05:57
поделиться

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

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

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

1
ответ дан Md. Sakib Hossain 19 August 2018 в 05:57
поделиться

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

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

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

    InputStream url = this.getClass().getResourceAsStream("/load04.gif");
    myImageView.setImage(new Image(url));
0
ответ дан Michel Fernandes 19 August 2018 в 05:57
поделиться

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

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

1
ответ дан Nevets17 19 August 2018 в 05:57
поделиться
  • 1
    Нет, это неверно. Просто протестировал это 5 минут назад. – Tastybrownies 12 November 2016 в 21:18

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

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

Шаги:

  1. Структура файла enter image description here [/g6]
  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. [Щелкните правой кнопкой мыши по проекту] & rarr; [Экспорт] & rarr; [Runnable Jar File] & rarr; [Настроить конфигурацию запуска] enter image description here [/g7]
  4. Прибыль enter image description here [/g8]

FYI, та же настройка работает в eclipse просто отлично и


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

Шаги:

  1. Файл Структура (ресурсы уведомлений выглядят как обычная папка) enter image description here [/g9]
  2. Что нам нужно сделать, это поместить ресурсы на путь сборки. То, что это делает, помещает все в папку (за исключением самой папки) на пути к классу. Щелкните правой кнопкой мыши по проекту и перейдите к [Путь сборки] & rarr; [Настройка пути сборки] enter image description here [/g10] На вкладке [Источники] в диалоговом окне выберите [Добавить папку] и в новом диалоговом окне выберите папку [resources] enter image description here [/g11]. Теперь содержимое папка ресурсов находится в пути сборки (обратите внимание на небольшой пакет в папке сейчас enter image description here [/g12]
  3. Новый код больше не использует префикс ресурсов для пути
    URL url = Main.class.getResource("/stackoverflow.png");
    
  4. То же, что и в шагах 3 и 4 сверху, и прибыль!

UPDATE

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

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

Шаги:

  1. [Right Click Project] & rarr; [Свойства] & rarr; [Параметры запуска / отладки] enter image description here [/g13] Вы можете видеть, что у меня уже есть прогон configruation (который неявно задан из простого запуска класса). Но чтобы создать новый, выберите [New] & rarr; [Java Applica ]
  2. Создайте имя для запуска конфигурации и просмотра или введите основной класс запуска. В моем случае его класс com.stackoverflow.test.Main enter image description here [/g14]
  3. Теперь, когда вы экспортируете, как показано в приведенном выше примере, вы выбираете конфигурацию запуска enter image description here [/g15]
  4. Запустите банку, как показано выше.

EDIT

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

Манифест:

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 [/g16]

64
ответ дан Paul Samsotha 19 August 2018 в 05:57
поделиться
  • 1
    Очень краткий! Пример 2 подходит мне. Хорошая работа ! – ralphgabb 8 December 2015 в 11:58
  • 2
    @peeskillet вы можете ответить на мой вопрос pls? [Д0] stackoverflow.com/questions/38685537/… – Talib 1 August 2016 в 07:33
  • 3
    Пример 1 работает для меня. Благодаря!! – J.J. Kim 30 September 2016 в 01:10
  • 4
    @peeskillet спас мой день. Я изучал свои коды для возможного #bug. но понял, что это проблема – exexzian 1 October 2016 в 12:04

Для создания исполняемого JAR-файла из Eclipse мы можем обратиться к статье «Создание Runnable Jars в 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 files -> next -> ...)

Но для файла изображения в приведенном выше примере кода он создает только ImageIcon, он не создает SWT-изображение, и есть много вопросы в Интернете о том, как получить SWT-изображение из URL-адреса или как преобразовать ImageIcon в SWT I mage, ниже приведен пример кода для получения 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 19 August 2018 в 05:57
поделиться

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

Пакетные библиотеки, вложенные в сгенерированный jar

to

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

в настройке Set Launch, который работал для меня.

2
ответ дан sazzy4o 19 August 2018 в 05:57
поделиться

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

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

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

0
ответ дан TheChubbyPanda 19 August 2018 в 05:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: