Невозможно изменить значок jFrame / загрузить ресурс для .jar с Eclipse - PullRequest
2 голосов
/ 05 января 2010

Я пытаюсь загрузить ImageIcon, как описано здесь , но получаю ошибку. Пробовал метод здесь тоже, но столкнулся с той же ошибкой. Там написано:

"Ошибка при получении изображения:
java.lang.NullPointerException ... "

Я не мог найти решение для этого. Я могу загрузить значок изображения, используя это:

setIconImage(new ImageIcon("etc/image.png").getImage());

Но тогда он не работает с .jar.

РЕДАКТИРОВАТЬ: с использованием

Image im = ImageIO.read(new File("etc/image.png"));  

И затем создание ImageIcon не дает мне ошибок, но не работает с .jar, даже если я использую опцию экспорта, как описано здесь .

РЕДАКТИРОВАТЬ 2: Хорошо, размещение моей папки / etc в папке / bin, созданной для проекта, решило эту проблему. У меня АБСОЛЮТНО НЕТ ИДЕИ, почему, поэтому я был бы благодарен, если бы кто-то мог объяснить мне это. Подожди, не обращай на это внимания. Это не работает для .jar.

РЕДАКТИРОВАТЬ 3: Решение проблемы здесь .

Обычно вы создаете папку в / src и затем импортируете в нее файлы. Чувак, я не могу поверить, что потерял столько времени из-за этого. RAGE

Ответы [ 2 ]

1 голос
/ 05 января 2010

При создании ImageIcon изображение загружается в отдельный поток.Таким образом, возможно, что изображение еще не загружено после создания ImageIcon.

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

ImageIcon imageIcon = new ImageIcon("etc/image.png");

int loadingDone = MediaTracker.ABORTED | MediaTracker.ERRORED | MediaTracker.COMPLETE;

while((imageIcon.getLoadStatus() & loadingDone) == 0){
   //just wait a bit...
}
if(imageIcon.getLoadStatus() == MediaTracker.COMPLETE)
    setIconImage(imageIcon.getImage());
else {
    //something went wrong loading the image...
} 

MediaTracker - это java.awt.MediaTracker

0 голосов
/ 05 января 2010

Я использую этот фрагмент, замените Config своим именем класса.

public static ImageIcon loadImageIcon(String filename) {

    URL url = Config.class.getClassLoader().getResource( IMAGE_DIR + filename);
    if (url == null) {
        System.err.println("No image for " + filename);
        return null;
    }
    ImageIcon icon = new ImageIcon(url);
    return icon;
}
...