2013-04-04 1 views
0

Моя программа отлично работает в Eclipse, но когда я ее экспортирую, изображения не отображаются.Изображения, не показывающиеся в Jar

Моя установка выглядит

src 
..gui 
....Main.java 
....menus 
......MenuMain.java 
res 
...Logo.png 

Я refence Logo.png из MenuMain.java, я попробовал много пути;

  • res/Logo.png
  • /res/Logo.png
  • .res/Logo.png
  • ../../Logo.png
  • ++++

Лучшие 3 из них работают в Eclipse, но ни работает в Jar. Я проверил файл Jar, там была папка res и все изображения. Я также попытался отредактировать MANIFEST.MF и добавил Class-Path:

Но он все еще не работает. Я не получаю никаких ошибок при запуске Jar, все остальное отображается в файле (Кнопки, метки, ++)

EDIT: Я использую это JPanel с GridBagLayout, добавляю ImageIcon в JLabel, чтобы иметь возможность добавьте его в JPanel. Первоначально я использовал что-то вроде:

JLabel logo = new JLabel(new ImageIcon("res/Logo.png")); 

Но я также пробовал другие варианты, как:

JLabel logo = new JLabel(new ImageIcon(MenuMain.class.getClassLoader().getResource("/res/Logo.png"))); 

, а также через getResourceAsStream()

Только первый один работает в Eclipse, но не показывает в Джаре. Остальные просто сломается (NullPointer)

+0

это свинг ? Можете ли вы опубликовать фрагмент, относящийся к чтению/рендерингу изображений? – asgs

+0

Когда вы запускаете из банки, обычно скомпилированное содержимое папки src и все содержимое папки res должны быть вместе. Затем вы просто загружаетесь из класса. –

+0

@asgs добавлено больше информации в главный пост – Limon

ответ

0

Вы должны включить Logo.png в вашем банке, и загрузить ресурс с помощью ClassLoader.getResourceAsStream() классам

Общая картина:

... 
InputStream resource = className.class.getResourceAsStream("/res/Logo.png"); 
Image image = ImageIO.read(resource); 
// do your display stuff here... 
... 
+0

У меня есть Logo.png в моей банке. И я также пробовал по крайней мере 10 вариантов вашего кода, но потом я не могу запустить его в eclipse (не пытался его экспортировать, поэтому я не знаю, работает ли это). – Limon

+0

Итак, используйте 'getResourceAsStream()' вместо 'FileInputStream' – PaulProgrammer

+0

Ресурс InputStream = MenuMain.class.getResourceAsStream ("/res/Logo.png "); \t \t JLabel logo = новый JLabel(); \t \t try { \t \t logo = новый JLabel (новый ImageIcon (ImageIO.read (resource))); \t \t} catch (IOException e) {e.printStackTrace(); } Предоставляет исключение в потоке "main" java.lang.IllegalArgumentException: input == null! – Limon

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

  • Нет связанных вопросов^_^