2009-11-02 4 views
3

У меня есть следующий код:ClassLoader.getResource() не работает из .jar файла

private final ImageIcon placeHolder = new ImageIcon(this.getClass().getClassLoader().getResource("Cards\\trans.png")); 

Но это не работает, как только мое приложение экспортируется в .jar файл.

+3

Не работает, как? Вы получаете исключение? Это не делает? Пожалуйста, будьте более конкретными –

+0

http://stackoverflow.com/questions/31127/java-swing-displaying-images-from-within-a-jar, как опубликовано jjnguy в вопросе, связанном с BalusC –

+1

Classmate? http://stackoverflow.com/questions/1662686/images-will-not-work-in-a-jar-file – BalusC

ответ

10

Ваш «\ т» компилируется в качестве вкладки - вам нужно, чтобы избежать его:

private final ImageIcon placeHolder = new ImageIcon(
    this.getClass().getClassLoader().getResource("Cards\\trans.png")); 

Примечание двойной обратной косой черты. Это, конечно, не единственное, что неправильно, но это начало ...

Фактически, я бы указал его вместо косой черты. В любом случае это работает как на ОС Windows, так и на Unix-системах, а также работает с файлами jar. Единственная причина, по которой я выделил двойную обратную косую черту, заключалась в том, чтобы поднять точку сбрасывания строк в целом. Попробуйте это:

private final ImageIcon placeHolder = new ImageIcon(
    this.getClass().getClassLoader().getResource("Cards/trans.png")); 

Далее, убедитесь, что у вас есть точное правильное имя файла, включая случай. Хотя файловые системы Windows обычно не чувствительны к регистру, файлы jar. Если на самом деле это «карты» вместо «Карты» или «TRANS.png» вместо «trans.png», это не сработает.

+0

Есть ли причина, по которой вы вызываете getResource на ClassLoader вместо класса? (т. е. не будет getClass(). getResource() работает?) – JRL

+0

@JRL: Если вы вызываете его из загрузчика классов, это относится к корню файла jar, а не к классу. Вы можете использовать ведущую косую черту, чтобы получить тот же эффект от вызова Class.getResource. –

2

Используйте это для получения изображений в банке файл

ClassLoader.getSystemResource("images/Springz3.png"));

+0

oh. Эм. гы. Вы не представляете, как долго я искал этот ответ. Все говорят, что используют getResource (..), но это не работает для изображений/звуков в файле jar! Вы должны использовать getSystemResource (..) !!!!! Спасибо за этот ответ! – BigSauce

+0

Не упоминайте пожалуйста. – Basil

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