Хранение ресурсов в jar - Java
Формулировка задачи:
Добрый день!
Необходимо, чтобы программа запускалась из jar на любом компьютере, то есть подгружала изображения именно из jar.
Случай (//1) работает только при запуске из IDE (IDEA), при отдельном запуске jar он очевидно не подцепляет изображение из-за неверного пути.
Но к сожалению, нагугленные способы (//2, 3, 4) тоже не помогают.
При распаковке jar со всем кодом, изображения оказываются в корне архива (по идее должны работать случаи 2 или 3)
А при попытке сделать как здесь
(создание статического класса-загрузчика в default package),
IDEA просто не видит этот класс.
Прощу вашей подсказки.
JDK 1.8 IntelliJ IDEA 15
Имеется JFrame, на нем JLabel. В JLabel я хочу поместить картинку, хранящуюся в jar со всем остальным кодом. Структура проекта: (корневой каталог) <- src (код) ....<-com ........<-company <- res (папка отмечена в IDEA как resource root, внутри хранятся картинки) ....Trapeze.png ....Triangle.png Код:public class PulseParameterFrame extends JFrame { //images for pulse visual //1 ImageIcon trapeze = new ImageIcon("res/Trapeze.png"); //2 ImageIcon rectangle = new ImageIcon("/Rectangle.png"); //3 ImageIcon triangle = new ImageIcon("Triangle.png"); //4 ImageIcon saw = (new ImageIcon(Toolkit.getDefaultToolkit().getImage("res/Saw.png"))); JLabel imageLabel = new JLabel(trapeze); public PulseParameterFrame() { super("Frame"); setBounds(500, 400, 700, 500); setLayout(new GridBagLayout()); GridBagConstraints gc = new GridBagConstraints(); setVisible(true); //остальные элементы в GridBag и actionListeners не приведены, работают как надо gc.gridx = 0; gc.gridy = 0; add(imageLabel, gc); } }
public class ResourceLoader { static ResourceLoader rl = new ResourceLoader(); public static Image getLuckyImage (String filename){ return Toolkit.getDefaultToolkit().getImage(rl.getClass().getResource(filename)); } }
Решение задачи: «Хранение ресурсов в jar»
textual
Листинг программы
public class ResourceLoader { static ResourceLoader rl = new ResourceLoader(); public static Image getLuckyImage (String filename){ return Toolkit.getDefaultToolkit().getImage(rl.getClass().getResource(filename)); } }