javax.imageio.IIOException При чтении входного файла - PullRequest
0 голосов
/ 14 октября 2018

Я пытаюсь установить Image для JLabel.Я использовал этот код, и он отлично работает в IDE.Но когда я пытаюсь запустить исполняемый файл Jar в папке dist, я получаю эту ошибку.

javax.imageio.IIOException: Не удается прочитать входной файл!

Как устранить эту проблему.Пожалуйста, кто-нибудь может мне помочь?Заранее спасибо.

Код есть,

ImageIcon iconPicture = new ImageIcon(ImageIO.read(new File("./src/PIC/Images/profileImage.png")));
pictureLabel.setIcon(iconPicture);

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Вы не можете полагаться на то, что «рабочий каталог» совпадает с местом хранения Jar / классов.

ImageIcon iconPicture = new ImageIcon(ImageIO.read(new File("./src/PIC/Images/profileImage.png")));

Это говорит о том, что вы имеете дело со встроенным ресурсом,тот, который содержится в файле classpath / Jar.В этом случае вы должны загружать ресурс, используя вместо этого Class#getResource, так как ресурс не будет читаться как File (если он содержится в файле Jar).

Итак, вместовыше, вы должны делать что-то более похожее на ...

ImageIcon iconPicture = new ImageIcon(ImageIO.read(getClass().getResource("/PIC/Images/profileImage.png")));
0 голосов
/ 14 октября 2018

Ваша программа при запуске не может найти изображение по заданному вами пути

./src/PIC/Images/profileImage.png

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

D:/work/proj1/src/PIC/Images/profileImage.png

или

. Вам нужно найти текущий каталог в соответствии с вашим проектом, а затем создатьправильный относительный путь.

Вы можете найти текущий путь к каталогу, следуя одному коду лайнера,

System.out.println(new File(".").getCanonicalPath());

Найдите свой текущий путь и затем исправьте относительный путь к указанному вами изображению.

...