Невозможно получить значок изображения в работающей банке - PullRequest
2 голосов
/ 16 декабря 2011

Я написал метод для получения значка для моего свинга:

public Icon getIcon(String iconName) {

    Icon icon = null;

    if(iconName.equals("NEXT")){
        icon = new ImageIcon( getClass().getResource("resources/img/next.png" ) );
    }

    return icon;
}

, но

icon = new ImageIcon( getClass().getResource("resources/img/next.png" ) );

идет в нулевом указателе

Я создал исходную папку"resources" и папка "img" внутри нее со значком "next.png"

В чем проблема?

Спасибо

Ответы [ 3 ]

3 голосов
/ 16 декабря 2011

Чтобы это работало, папка ресурсов должна находиться в той же папке, что и папка, соответствующая пакету this.getClass().Чтобы начать с корня пути к классам, используйте getClass().getResource("/resources/img/next.png").(с ведущим /)

1 голос
/ 31 декабря 2014

Для тех, кто нуждается в помощи, которые сталкивались с этой страницей в Google - я написал ответ в другом вопросе StackOverflow , который дает лучший способ обработки изображений в приложениях JAVA, чтобы вы могли легко получить доступ к изображениям для всех типов методов изображения в Java:

Это лучший способ обработки всех изображений и значков в приложении JAR.

После того, как вы заархивировали все свои изображения и значки в собственный JAR-файл - настройте путь сборки, добавив JAR-файл изображений на вкладку библиотеки, чтобы он теперь был включен в ваш путь к классам.

Затем просто используйте следующие 3x строки кода в начале вашего конструктора, чтобы получить доступ к любому изображению, в котором вы нуждаетесь, для чего угодно, включая изображение SystemTray, которое не принимает простой ImageIcon в качестве основного значка (странно Я знаю). 3x строки:

  URL iconUrl = this.getClass().getResource("/image-iconb.png");
  Toolkit tk = this.getToolkit();
  someimgicon = tk.getImage(iconUrl);

(someimgicon - это просто конструктор, объявленный как переменная Image) Теперь вы можете установить значок окна так же, как:

setIconImage(someimgicon);

и одновременно используют одну и ту же переменную при настройке System TrayIcon, объявив:

 trayIcon = new TrayIcon(someimgicon, "SystemTray Demo", popupMenu);

Вышеприведенное позволяет легко и централизованно объявлять изображения или изображения изображений, не рискуя не хранить ресурсы изображения в нужном месте. Это делает его красивым и аккуратным, так как JAR содержит все ваши изображения, автоматически скомпилированные во время выполнения и распространения вашей программы.

В качестве бонуса , как только JAR зарегистрирован в вашем classpath - вы можете продолжать добавлять любые другие изображения в тот же JAR в любое время без лишней суеты - все просто работает, и добавленные изображения мгновенно доступны для вашего приложения.

На мой взгляд, намного лучше.

1 голос
/ 17 декабря 2011

Итак, я нашел правильный метод:

public static ImageIcon getImageIcon(String iconName) {

    ImageIcon imageIcon = null;

    if(iconName.equals("DOWNLOAD")){
        imageIcon = new ImageIcon(ImagesLocation.class.getResource("/img/download.png"));
    }

    return imageIcon;
}

с исходной папкой «resources» на том же уровне проекта и с папкой img внутри (в стиле пакета)

ImagesLocation - это универсальный класс, содержащий этот метод

...