Ресурсы в SWING приложении

В swing-приложениях при работе с встроенными ресурсами (такие как изображения) есть разница, откуда эти ресурсы подцепляются в зависимости от условий запуска. Это может быть запуск из IDE а может запуск JAR файла


Из-за этого придётся привести в порядок местоположение файлов
В итоге должна структура, как скниншотике справа

  1. В корне нужно создать папку/пакет resources
  2. Все ресурсы (изображения/тексты/звуки) переместить туда
  3. Поместить класс Resource, который обеспечит доступ к ресурсам:

    package resources;

    import java.awt.Image;
    import java.awt.Toolkit;
    import java.net.URL;

    /**
    * Resources loader
    * @author ruX[Ruslan Zaharov], http://ruX.pp.ru
    */
    final public class Resource {
    public static final Image getImage(String filename) {
    Image image;
    try {
    final URL url = Resource.class.getResource(filename);
    image = Toolkit.getDefaultToolkit().getImage(url);
    } catch (Exception e) {
    image = Toolkit.getDefaultToolkit().getImage("resources/" + filename);
    }
    return image;
    }
    }

  4. Для получения ресурса из любого места в коде следует общаться так:
    final Image trayIco = Resource.getImage("tray.gif");

Вообще странно, что приходится так такнцевать с бубном. Казалось бы это достаточно стандартная операция – допустим, расставить иконки в меню. Разумеется эти иконки должны быть вшиты в jar, а не висеть снаружи, на мой взгляд (для наиболее простой “транспортировки” приложения).