2010-01-05 2 views
2

Я пытаюсь загрузить ImageIcon, как описано here, но я получаю сообщение об ошибке. Пробовал также метод here, но столкнулся с той же ошибкой. Он говорит:Невозможно изменить значок jFrame/загрузить ресурс для .jar с Eclipse

"Uncaught ошибка выборки изображения:
java.lang.NullPointerException ..."

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

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

Но это не работает с .jar.

EDIT: использованием

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

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

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

EDIT 3:Solution to the problem here.

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

+0

Для лучшей помощи рано, после SSCCE (http://pscode.org/sscce.html), основанный на методе getResource, и структуру Jar (как результат с помощью инструмента jar). –

ответ

0

Я использую этот фрагмент, заменяю 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; 
} 
+0

этот код возвращает null мне. я не понимаю, изображение есть. – zxcvbnm

+0

Извините, что вы впервые получили сообщение «no image», поэтому у вас нет проблемы с загрузчиком класса. вы пытаетесь загрузить большие изображения? поэтому не может сочетать оба предложения. Я использовал это для загрузки значков 16x16, и у меня никогда не было белых пятен в моем приложении. – stacker

+0

У меня были проблемы с загрузкой значков для фреймов в течение длительного времени, пока я не понял, что используется неправильный загрузчик классов (загрузочный загрузчик классов). Чтобы получить загрузчик контекстного класса, более надежно использовать this.getClass(). GetResource (IMAGE_DIR + имя файла); - поскольку «this» не может быть вызван ничем, кроме пользовательского класса, который должен быть загружен загрузчиком класса контекста. –

1

При создании 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

Смежные вопросы