Как установить изображение значка для приложения Swing? - PullRequest
0 голосов
/ 25 августа 2011

Я видел много разных примеров, показывающих, как установить IconImage в JFrame, чтобы приложение использовало этот значок вместо стандартной кофейной кружки.Ни один из них не работает для меня.

Вот «мой» код (в значительной степени заимствованный из других постов и Интернета в целом):

public class MyApp extends JFrame
{
    public MyApp()
    {
        ImageIcon myAppImage = loadIcon("myimage.jpg");
        if(myAppImage != null)
            setIconImage(myAppImage.getImage());
    }

    private ImageIcon loadIcon(String strPath)
    {
        URL imgURL = getResource(strPath);
        if(imgURL != null)
            return new ImageIcon(imgURL);
        else
            return null;
    }
}

Этот код не работает в loadIcon, когдавызов метода getResource().Для меня здесь есть только 2 возможности: (1) myImage.jpg находится в неправильном каталоге, или (2) getResource() что-то не нравится в моем изображении (мне пришлось преобразовать его из CMYK в RGB в Photoshop, так чтоЯ мог бы использовать то же изображение в другом месте с ImageIO.)

Я использовал трюк System.out.println(new File(".").getAbsolutePath());, чтобы найти каталог, в котором должно храниться изображение JPG, но все равно ничего не получалось.Впоследствии я поместил JPG практически во все каталоги внутри моего проекта, просто чтобы исключить местоположение файла в качестве виновника.

Так что мне остается верить, что есть что-то, что getResource() не нравится в JPGсам.Но я уже исчерпал свое понимание изображений и значков в могущественном, широком мире Swing.

Мой JPG прекрасно загружается в других средствах просмотра изображений, так что это тоже исключено.У кого-нибудь есть идеи?

Заранее спасибо!

Ответы [ 4 ]

2 голосов
/ 25 августа 2011

поместите изображение в корень пути к классу и скажите getResource("classpath:myimage.jpg");

Проблема с вашим кодом состоит в том, что jvm не уверен, где искать файл изображения, поэтому он возвращает ноль.

Вот хорошая ссылка о classpath

1 голос
/ 12 августа 2014

Я пытался следовать, что было ответом на такой же вопрос , как у вас.И это работает для меня.

Попробуйте поместить изображения в отдельную папку вне папки src.Затем используйте ImageIO для загрузки ваших изображений.(отвечено 27 августа '13 в 0:18 AndyTechGuy)

frame.setIconImage(ImageIO.read(new File("res/icon.png")));
1 голос
/ 25 августа 2011

должно быть

if(imgURL != null)
           ^

вместо

if(imgURL !- null)

и

URL imgURL = this.getClass().getResource(strPath);

вместо

URL imgURL = getResource(strPath);

Тогда все работает нормально, если "myimage.jpg" находится в том же каталоге с MyApp.class

0 голосов
/ 25 сентября 2011

Два предложения:

  1. Попробуйте использовать getClass().getResource("x.jpg") и поместить файл непосредственно в ту же папку, что и файл .class класса, в котором вы находитесь.
  2. Убедитесь, что имя идентично в случае - некоторые операционные системы чувствительны к регистру, а в JAR все чувствительно к регистру.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...