Ответ 1
Проблема заключалась в том, что у меня был этот проект в моем профиле Windows... у которого был "!" в нем... (DeNitE! → было именем моего профиля Windows)
Как только я изменил его на DeNitE (без!), он работал нормально...
Мои изображения не будут загружаться при запуске 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();
}
Любые предложения?
Проблема заключалась в том, что у меня был этот проект в моем профиле Windows... у которого был "!" в нем... (DeNitE! → было именем моего профиля Windows)
Как только я изменил его на DeNitE (без!), он работал нормально...
Прекрасно работает для меня. Проверьте, что у вас может быть другое.
Шаги:
Структура файла
код
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] → [Настройка конфигурации запуска]
Profit
FYI, та же самая установка работает в eclipse просто отлично.
Шаги:
Структура файла (ресурсы уведомлений выглядят как простая папка)
Теперь нам нужно поместить ресурсы на путь сборки. Это делает все, что находится в папке (за исключением самой папки) в пути к классам
Щелкните правой кнопкой мыши по проекту и перейдите к [Путь сборки] → [Настроить путь сборки]
На вкладке [Источники] в диалоговом окне выберите [Добавить папку] и в новом диалоговом окне выберите папку [resources]
Теперь содержимое папки ресурсов находится в пути сборки (обратите внимание на маленький пакет в папке сейчас
Новый код больше не использует префикс ресурсов для пути
URL url = Main.class.getResource("/stackoverflow.png");
То же, что и в шагах 3 и 4 сверху, и прибыль!
UPDATE
Как правило, после запуска класса (т.е. щелкните правой кнопкой мыши на классе и запустите как приложение Java), будет настроена конфигурация запуска. Вам понадобится это, чтобы установить как точку запуска в манифесте. Но вот как это сделать вручную.
Шаги:
[Right Click Project] → [Свойства] → [Run/Debug Settings]
Вы можете видеть, что у меня уже есть сценарий запуска (который неявно задан из простого запуска класса). Но чтобы создать новый, выберите [New] → [Приложение Java]
Создайте имя для запуска конфигурации и просмотра или введите основной класс запуска. В моем случае класс com.stackoverflow.test.Main
Теперь, когда вы экспортируете, как показано в приведенном выше примере, вы выбираете конфигурацию запуска
Запустите банку, как показано выше.
ИЗМЕНИТЬ
манифеста:
Manifest-Version: 1.0
Rsrc-Class-Path: ./
Class-Path: .
Rsrc-Main-Class: com.stackoverflow.test.Main
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
Извлеченная банка:
Я обнаружил, что когда вы изменили:
Пакетные библиотеки, необходимые для создания jar
к
Извлечение необходимых библиотек в сгенерированную банку
в настройке "Настройка запуска" он работал у меня.
Для создания исполняемого JAR файла из Eclipse мы можем обратиться к статье "Создание Runnable Jars в Eclipse (или другой среде IDE... или вручную):" (https://www.cefns.nau.edu/~edo/Classes/CS477_WWW/Docs/RunnableJarsinEclipse.html), он упомянул, что нам нужно сделать четыре вещи как
Но для файла изображения в приведенном выше примере кода он создает только 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();
}
Другая работа вокруг - если вы поместите свой файл ресурсов, ваш .jar файл в том же месте, он должен работать. Единственный недостаток - вы должны всегда иметь ресурсы с файлом jar.
Если это не проблема, вы можете сделать это таким образом.
Если вам не нужны файлы в банке, это, вероятно, самый простой способ сделать это:
header = ImageIO.read(new File("./resources/header.jpeg"));
должен быть Image/BufferedImage. Это относится к папке, в которой находится runnable jar, и ищет папку с названием ресурсов. http://i.stack.imgur.com/x8xtO.png
Два простых шага:
1 - добавьте папку в "Путь сборки";
2 - Используйте это:
InputStream url = this.getClass().getResourceAsStream("/load04.gif");
myImageView.setImage(new Image(url));
У меня такая же проблема.. Вы можете использовать это.
Image Icon= new ImageIcon(new WE4().getClass().getResource("IC.jpg"))
Здесь WE4 - это имя моего класса. Надеюсь, что это поможет.