Хранение ресурсов в jar - Java

Узнай цену своей работы

Формулировка задачи:

Добрый день!

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);
}
}
Необходимо, чтобы программа запускалась из jar на любом компьютере, то есть подгружала изображения именно из jar. Случай (//1) работает только при запуске из IDE (IDEA), при отдельном запуске jar он очевидно не подцепляет изображение из-за неверного пути. Но к сожалению, нагугленные способы (//2, 3, 4) тоже не помогают. При распаковке jar со всем кодом, изображения оказываются в корне архива (по идее должны работать случаи 2 или 3) А при попытке сделать как здесь (создание статического класса-загрузчика в default package),
public class ResourceLoader {
 
    static ResourceLoader rl = new ResourceLoader();
 
    public static Image getLuckyImage (String filename){
        return Toolkit.getDefaultToolkit().getImage(rl.getClass().getResource(filename));
    }
 
}
IDEA просто не видит этот класс. Прощу вашей подсказки.

Решение задачи: «Хранение ресурсов в jar»

textual
Листинг программы
public class ResourceLoader {
 
    static ResourceLoader rl = new ResourceLoader();
 
    public static Image getLuckyImage (String filename){
        return Toolkit.getDefaultToolkit().getImage(rl.getClass().getResource(filename));
    }
 
}

Оцени полезность:

9   голосов , оценка 4.111 из 5