В ImageIO есть несколько статических методов, позволяющих считывать изображения из разных источников. Наиболее интересными в вашем случае являются:
BufferedImage read(ImageInputStream stream)
BufferedImage read(File input)
BufferedImage read(InputStream input)
Я проверил внутри в коде. Он использует абстрактный класс ImageReader, и есть три разработчика: JPEGReader. PNGReader и GIFReader. Эти классы и BufferedImage, по-видимому, не используют никаких собственных методов, поэтому они всегда должны работать.
Похоже, что у вас есть AWTError, потому что вы используете Java в безголовой конфигурации, или что у инструментария Windows есть какая-то проблема. Хотя, не глядя на конкретную ошибку, сказать сложно. Это решение позволит вам прочитать изображение (возможно), но в зависимости от того, что вы хотите с ним сделать, AWTError может появиться позже при попытке его отобразить.