2013-11-14 2 views
1

Когда я делаю JAR, JAR не будет читать папку внутри него, а только папку в папке JAR. Хорошо, это было не очень описательно. Итак, вот фотография, которую я редактировал для поддержки. enter image description hereJava jar не читает файлы из банки, только внешние папки?

Надеюсь, вы поняли эту идею сейчас. Так как я могу это исправить? У меня уже есть res и stats часть пути сборки в eclipse, теперь что?

код я использую для чтения ресурсов:

Image player; player = new ImageIcon("res/player.png").getImage();

+0

Пожалуйста показать код, который вы используете для загрузки ресурса. – dnault

+1

Отправить код, нет фотографий ... – thst

+0

Распакуйте банку и убедитесь, что «res» включен внутри. Убедитесь, что вы загружаете ресурсы с помощью 'Class # getResource' или' Class # getResourceAsInStream' – MadProgrammer

ответ

5

При использовании ImageIcon и передавая ему String, он ожидает, что параметр относится к File.

От JavaDocs

Создает ImageIcon из указанного файла. ... Указанная строка может быть именем файла или файлом пути

Файлы и «ресурсы» - это разные вещи.

Вместо этого попробуйте использовать что-то больше, как ...

new ImageIcon(getClass().getResource("res/player.png")); 

Предполагая, что res/player.png находится в банке в стороне каталога res.

В зависимости от отношения к классу пытается загрузить ресурс и местоположение ресурса, возможно, потребуется использовать

new ImageIcon(getClass().getResource("/res/player.png")); 

вместо ...

Обновлено

Некоторые рекомендации , как указал EJP, вы должны быть готовы к тому, что ресурс не будет найден.

URL url = getClass().getResource("/res/player.png"); 
ImageIcon img = null; 
if (url != null) { 
    img = new ImageIcon(url); 
} 
// Deal with null result... 

И вы должны использовать ImageIO.read для чтения изображений. Помимо того, что он поддерживает больше (и может поддерживать больше в будущем) графических форматов, он загружает изображение, прежде чем вернуться и бросает IOException, если изображение не может быть прочитан ...

URL url = getClass().getResource("/res/player.png"); 
ImageIcon icon = null; 
if (url != null) { 
    try { 
     BufferedImage img = ImageIO.read(url); 
     icon = new ImageIcon(img); 
    } catch (IOException exp) { 
     // handle the exception... 
     exp.printStackTrace(); 
    } 
} 
// Deal with null result... 
+2

И убедитесь, что результат getResource() не равен NULL. – EJP

+0

@EJP +1 И вместо этого используйте 'ImageIO.read' – MadProgrammer

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