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

Я начал Java неделю назад, и теперь я хотел бы вставить изображение в свое окно. Что бы я ни старался, я продолжаю иметь это в Eclipse: javax.imageio.IIOException: не удается прочитать входной файл!

package graphics;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import src.Common;

public class Window extends JFrame
{
public class Panel extends JPanel
{

    public void paintComponent(Graphics g)
    {
        Image img; 
        try 
        {
        img = ImageIO.read(new File("/logo.jpg"));
        g.drawImage(img, 0, 0, this);
        } 
        catch (IOException e) 
        {
        e.printStackTrace();
        }

    }
}

public Window(String title, int width, int height)
{
    this.setTitle(title);
    this.setSize(width, height);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setContentPane(new Panel()); 
    this.setVisible(true);
}

}

Я думаю, что код довольно самообучающийся. Я попытался решить проблему с этим, этим и что.

То, что я пытаюсь сделать, - это настольная программа, и мои источники хранятся так: Обучение/SRC/графика/Window Обучение/SRC/SRC/главная

Я поместил изображение, которое я хочу прочитать в каждой папке, и все еще получаю проблему:/

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

EDIT Наконец-то решено, здесь ответ

nIcE cOw дал мне ссылку , которая помогла. Поэтому я поместил свои изображения в папку и изменил способ доступа к ним, как описано в ссылке.

getClass().getResource("/images/yourImageName.extension");

Ответ 1

Пробовали ли вы использовать new File("logo.jpg"); (без ведущего /)?

И вы уверены, что логотип .jpg скопирован на ваш выход? (Некоторые IDE не копируют каждый файл из ваших исходных каталогов в ваши выходные (или целевые) каталоги.)

/src
|-> Window.java
|-> Logo.jpg

становится

/out
|-> Window.class

(Обратите внимание, что IDE/компилятор не копирует изображение в ваш выходной каталог и поэтому скомпилированный код не может найти изображение - хотя вы указали правильный путь)

Ответ 2

Попробуйте отладить, какой файловый ресурс вы фактически пытаетесь получить доступ к. Первым шагом будет получение new File("/logo.jpg").get [Canonical]Path() и печать на System.out (или, альтернативно, просмотр в отладчике). Я думаю, проблема заключается в / до logo.jpg, которая указывает на ваш корневой каталог (например, c:), и вашего файла нет, но я не знаю вашу настройку файла в деталях.

Ответ 3

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

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

ImageIO.read(new File("Folder/Image.png"));

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

ImageIO.read(new File("D:/eclipse/Workspace/Project/Folder/Image.png"));

Создание папки в вашем проекте, чтобы она находилась на том же уровне, что и исходная папка в каталоге и вызывала ее для изображения, например:

Структура папки;

Настройки

SRC

Папка с изображениями

бен