IOException: StreamClosed без видимой причины - PullRequest
0 голосов
/ 26 июня 2019

Я создал программу на Java, которую я хочу упаковать в исполняемый файл JAR.Я хочу, чтобы эта программа брала изображения из файла jar и отображала их.Я создал абстрактный класс с методом для взятия имени файла String и возврата объекта Image.Тем не менее, когда я пытаюсь запустить этот метод, он завершается ошибкой и выдает ошибку «IOException: Поток закрыт».

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

Если я называю файл изображения только по его имени (например, "example.png") или использую его относительный путь (например, "/src/icons/example.png"), ИЛИ использую его абсолютный путь (т.е."C: /Users/My_Name/Desktop/EXAMPLE/src/icons/example.png") Я получаю ту же ошибку закрытия потока.

public static Image importImage(String fileName) throws IOException {
    Image img = null;

    byte[] data = new byte[10000];

    BufferedInputStream bis = new BufferedInputStream(      Thread.currentThread().getClass().getResourceAsStream(fileName));

    int byteRead = bis.read(data, 0, 10000);

    img = Toolkit.getDefaultToolkit().createImage(data);

    return img;
}

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

1 Ответ

0 голосов
/ 26 июня 2019

Хорошо.Как оказалось, такой метод имеет два требования: во-первых, вы должны вызвать thisClassName.class.getResourceAsStream (fileName).Именно так.Вам также нужно, чтобы ваше fileName начиналось с '/', иначе оно не будет работать полностью.Но, пока ресурсы, которые вы ищете, включены в classpath вашей программы, он должен работать оттуда.

...