В swing-приложениях при работе с встроенными ресурсами (такие как изображения) есть разница, откуда эти ресурсы подцепляются в зависимости от условий запуска. Это может быть запуск из IDE а может запуск JAR файла
Из-за этого придётся привести в порядок местоположение файлов
В итоге должна структура, как скниншотике справа
- В корне нужно создать папку/пакет resources
- Все ресурсы (изображения/тексты/звуки) переместить туда
- Поместить класс 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;
}
} - Для получения ресурса из любого места в коде следует общаться так:
final Image trayIco = Resource.getImage("tray.gif");
Вообще странно, что приходится так такнцевать с бубном. Казалось бы это достаточно стандартная операция - допустим, расставить иконки в меню. Разумеется эти иконки должны быть вшиты в jar, а не висеть снаружи, на мой взгляд (для наиболее простой "транспортировки" приложения).