Чтение пути изображения с помощью «ImageIO.read» для отображения в JLabel - PullRequest
1 голос
/ 01 апреля 2020

Полный локальный путь (C:\\Users\\workspace\\myproject\\src\\eclipse\\mainclass\\icons\\my-image.png) работает нормально, но использование короткого пути, как показано в коде ниже, дает исключение javax.imageio.IIOException: Can't read input file!.

Что я здесь не так делаю?

    JLabel lab_h1 = new JLabel();
    BufferedImage img = null;

    try {
        img = ImageIO.read(new File("icons/my-image.png"));

    } catch (IOException e) {
        e.printStackTrace();
    }

    Image dimg = img.getScaledInstance(140, 40,Image.SCALE_SMOOTH);

    lab_h1.setIcon(new ImageIcon(dimg));

1 Ответ

2 голосов
/ 01 апреля 2020

Проблема, с которой вы сталкиваетесь, когда вы пытаетесь открыть файл с относительным путем, он выглядит относительно того места, где вы запускаете программу. Вместо того, чтобы надеяться получить правильный путь, вы можете использовать Ресурс.

BufferedImage img = ImageIO.read( 
       YourClassName.class.getResource(
             "/mainclass/icons/my-image.png"
       ) 
 );

Я думаю, что вам, возможно, придется изменить путь, так как я не знаю, какова ваша структура пакета. Я также предполагаю, что eclipse объединит файлы ресурсов, которые находятся в вашей исходной папке.

...